【问题标题】:Asp.Net Core Spa how to redirect to external urlAsp.Net Core Spa 如何重定向到外部 url
【发布时间】:2020-05-03 17:02:13
【问题描述】:

获得了一个 Asp.Net Core 3.0 Angular Spa 应用程序。需要调用外部 url 以使用户能够处理付款(所以​​不是 100% spa ...)。如何在来自我的控制器的 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)? 提前感谢您的帮助!

【问题讨论】:

    标签: asp.net-mvc rest asp.net-core


    【解决方案1】:

    由于您使用的是 http PUT,您可以返回 201,并将 content-location 设置为新的 URL,这很常见:

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

    然后您可以使用 angular 获取 content-location 并将用户转发到该页面。

    您应该能够为 PUT 重定向返回 303 重定向,所以我觉得这不是最好的选择。

    【讨论】:

      【解决方案2】:

      最简单的解决方案是从 put 方法返回destinationUrl,并将该结果设置为新的窗口位置。

      [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;
          });
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-05
        • 1970-01-01
        • 2012-12-02
        • 2017-12-11
        • 2012-01-10
        • 2012-08-02
        • 1970-01-01
        相关资源
        最近更新 更多