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

时间:2016-02-23 19:37:55

标签: c# asp.net-mvc-4 url.action

我使用下面的代码生成完全限定的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追加两次。什么可能解决这个问题?为什么会这样?

1 个答案:

答案 0 :(得分:2)

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

因为:

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

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

使用此修复程序,您的端口将自动添加,并且不会有端口重复。