MVC3生成包含端口号的URL,如何停止它

时间:2014-09-01 12:47:23

标签: asp.net asp.net-mvc-3 iis-7.5

我们刚刚发现了新的“云”托管问题。 已经配置了基本的NAT /端口转发,因为它们不允许多个内部IP,因此可以为多个站点完成SSL证书。

这会导致在指定协议的情况下生成的任何MVC路由出现问题。 此外,如果尝试转到需要登录的URL,则重定向的https登录URL中的ReturnUrl参数也具有端口号。

问题是 - 是否有任何方法告诉M​​VC永远不要包含端口号,即使存在一个端口号,缺少使用UrlHelpers操作/路由方法重载,允许您指定域并因此手动剥离端口号。

如果从上面看不出请求过程是什么样的,这里有一个小例子:

  • 用户浏览器向网站发出请求
  • 服务器转发相同的网址但附加了端口号
  • 生成页面
  • 将回复发送回用户浏览器。
  • 用户登录但现在返回的URL有端口,因此当重定向用户时,无法显示页面。

由于端口转发malarkey,这似乎导致MVC路由变得混乱。 不太了解技术服务器端我不确定是否只是托管公司没有在IIS或NAT中正确配置某些东西,或者是否只有一些web.config内容需要配置以使MVC生成正确的URL好像此端口malarkey不存在。

最值得赞赏的任何提示或指示。

1 个答案:

答案 0 :(得分:7)

幸运的是,事实证明有一个配置解决方案(因为人们问“代码更改怎么样?” - >我:“说真的?不,这一定是配置问题”)。

解决方案易于实施;将以下内容添加到web.config的<appSettings>部分:

<add key="aspnet:UseHostHeaderForRequestUrl" value="true" />

因此,当ASP.NET / MVC生成URL时,它将始终使用用户请求的网站的主机头而不是端口转发的版本,yay!