控制器中的 Url.Action 生成端口两次

本文关键字:两次 Url Action 控制器 | 更新日期: 2023-09-27 18:35:50

我正在使用以下代码段来生成一个完全限定的url并将其作为json传递回以进行重定向。

returnUrl = Url.Action("ActionName", "Controller", 
                       new RouteValueDictionary(new { type= returnUrl }), 
                       HttpContext.Request.Url.Scheme, 
                       HttpContext.Request.Url.Authority);

returnUrl最初将有一个值type1type2这就是为什么我将类型指定为returnUrl,然后用生成的url替换其值,但它生成

http://localhost:49518:49518/Controller/ActionName?type=type1
                     //^^^^^ Extra port added

并附加端口号49518两次。对此可能的解决方案是什么?为什么会这样?

控制器中的 Url.Action 生成端口两次

只需将HttpContext.Request.Url.Authority替换为HttpContext.Request.Url.Host即可。

因为:

  • HttpContext.Request.Url.Authority返回服务器的域名系统 (DNS) 主机名或 IP 地址以及端口
  • HttpContext.Request.Url.Host返回服务器的 DNS 主机名或 IP 地址。

在您的代码中,您使用的重载Url.Action接受主机名而不是包含端口的权限。

通过此修复,您的端口将自动添加,并且不会有端口重复。