Url.Action 在控制器中两次生成端口
Url.Action in controller generates port twice
我正在使用下面的代码生成完全限定的 url
并将其作为 json
传回以进行重定向。
returnUrl = Url.Action("ActionName", "Controller",
new RouteValueDictionary(new { type= returnUrl }),
HttpContext.Request.Url.Scheme,
HttpContext.Request.Url.Authority);
returnUrl
最初会有一个值 type1
或 type2
这就是为什么我将类型指定为 returnUrl
然后用生成的 url
,但它生成
http://localhost:49518:49518/Controller/ActionName?type=type1
//^^^^^ Extra port added
并附加端口号 49518
两次。可能的解决方案是什么?为什么会这样?
只需将 HttpContext.Request.Url.Authority
替换为 HttpContext.Request.Url.Host
。
因为:
HttpContext.Request.Url.Authority
returns 域名系统 (DNS) 主机名或 IP 地址和 服务器的端口号。
HttpContext.Request.Url.Host
returns 服务器的 DNS 主机名或 IP 地址。
在您的代码中,您使用了 Url.Action
的重载,它接受主机名而不是包含端口的权限。
通过此修复,您的端口将自动添加,并且不会出现端口重复。
我正在使用下面的代码生成完全限定的 url
并将其作为 json
传回以进行重定向。
returnUrl = Url.Action("ActionName", "Controller",
new RouteValueDictionary(new { type= returnUrl }),
HttpContext.Request.Url.Scheme,
HttpContext.Request.Url.Authority);
returnUrl
最初会有一个值 type1
或 type2
这就是为什么我将类型指定为 returnUrl
然后用生成的 url
,但它生成
http://localhost:49518:49518/Controller/ActionName?type=type1
//^^^^^ Extra port added
并附加端口号 49518
两次。可能的解决方案是什么?为什么会这样?
只需将 HttpContext.Request.Url.Authority
替换为 HttpContext.Request.Url.Host
。
因为:
HttpContext.Request.Url.Authority
returns 域名系统 (DNS) 主机名或 IP 地址和 服务器的端口号。HttpContext.Request.Url.Host
returns 服务器的 DNS 主机名或 IP 地址。
在您的代码中,您使用了 Url.Action
的重载,它接受主机名而不是包含端口的权限。
通过此修复,您的端口将自动添加,并且不会出现端口重复。