Asp. Net Core Spa, как перенаправить на внешний URL - PullRequest
0 голосов
/ 01 мая 2020

Получил Asp. Net Core 3.0 Angular Спа-приложение. Нужно вызвать внешний URL, чтобы позволить пользователю обрабатывать платежи (поэтому не 100% спа ...). Как реализовать это в запросе HttpPut от моего контроллера? Упрощенный код выглядит следующим образом:

[HttpPut("PayOrder")]
public async Task<IActionResult> PayOrder(Order orderInfo)
{
  if (orderInfo.HasErrors())
  {
    return BadRequest();
  }

  string destinationUrl = GetExternalPaymentUrl(orderInfo);

  Response.Redirect(destinationUrl);
}

Response.Redirect (или RedirectToAbsoluteUrl) не работает. Как показать пользователю страницу внешнего платежа (destinationUrl)? Заранее спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

Самое простое решение - вернуть destinationUrl из метода put и установить в качестве нового windows местоположение.

[HttpPut("PayOrder")]
public async Task<IActionResult> PayOrder(Order orderInfo)
{
  ...
  string destinationUrl = GetExternalPaymentUrl(orderInfo);
  return new JsonResult(serviceReturn.destinationUrl);
}

и клиентскую сторону:

payOrder(order: Order): {
  const options = {
    headers: new HttpHeaders({ 'Content-Type': 'application/json' })
  };

  this.http.put<string>(`${this.baseUrl}basicpersoncompanyinfo/PayOrder`, order, options)
    .subscribe(url => {
      window.location.href = url;
    });
}
0 голосов
/ 01 мая 2020

Поскольку вы используете http PUT, вы могли бы вернуть 201 с content-location, установленным на новый URL, как обычно:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PUT

Затем вы можете использовать angular, чтобы получить content-location и перенаправить пользователя на эту страницу.

Вы сможете вернуть перенаправление 303 для перенаправления PUT, хотя так я не думаю, что это будет лучший вариант.

...