2014-09-01 46 views
3

我们刚发现我们的新“云”托管存在问题。 基本上,NAT /端口转发已配置,因为它们不允许多个内部IP,因此可以为多个站点完成SSL证书。MVC3生成包含端口号的URL,如何阻止它

这会导致在指定协议时生成的任何MVC路由出现问题。 此外,如果尝试去一个需要登录的URL,重定向的https登录URL中的ReturnUrl参数也有端口号码。

问题是 - 有什么方法可以告诉MVC永远不会包含即使存在端口号,也不会使用UrlHelpers操作/路由方法重载,从而允许您指定域并因此手动剥离端口号。

在情况不是很明显从上面的什么请求的过程是这样,这里有一个小例子:

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

由于端口转发malarkey,这似乎导致MVC路由变得混乱。 不知道技术服务器端如此好我不确定它是否只是托管公司不配置在IIS或NAT的东西正确的东西或是否只是一些web.config的东西,需要配置,以使MVC生成正确的URLs就好像这个端口malarkey不存在一样。

任何提示或指针最受赞赏。

+0

呃,如果你有客户端脚本,那也将是一个头痛的问题。也许在[服务器故障](http://serverfault.com/)的人可以帮助在配置方面..对我来说,我不明白为什么端口被附加在第一位 - 是“切换“443”和“80”(http/s)? – EdSF 2014-09-01 16:45:20

+0

不,这是因为您有一台托管多个站点的服务器,但出于SSL证书的目的,它需要一个IP地址,并且您不能为多个域注册相同的IP地址。由于云服务器上只允许有一个内部IP,因此使用端口号进行转发是唯一的办法,但这会导致上述问题。然而,看到我自己的答案 - 唷! – Peter 2014-09-03 14:25:26

回答

5

幸运的是,我发现有一个配置解决方案(因为人们问“代码更改怎么样?” - >我:“认真?没有这必须是配置问题”)。

该解决方案实施起来很简单;添加以下到web.config的<appSettings>部分:

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

因此,当ASP.NET/MVC生成的URL,将始终使用主机头用于在其上用户已请求代替网站端口转发版本,耶!

+0

+1这很有趣! – EdSF 2014-09-03 15:36:30