Request.Url.Host vs Request.Url.Authority

时间:2013-08-18 20:28:20

标签: c# asp.net

我继承了用C#编写的ASP.NET Web应用程序。在整个站点的许多页面中,使用以下命令检索主机名:

BaseHost = Request.Url.Host;

由于我使用的是Visual Studio 2012 Express并且它安装了本地IIS Express服务器,因此当我在本地调试/运行时,我似乎会在主机名(localhost)附加一个端口号。上面的代码不会导致包含端口号,因此会破坏由代码生成的链接(菜单项链接,重定向等)。

我看到我可以通过将代码更改为:

来克服此问题
BaseHost = Request.Url.Authority;

这似乎通过在我本地运行时(localhost:4652)包含端口以及发布到我的登台服务器(development.mysite.com)时修复它。

我的问题:这是不好的形式?是否有时间或情况会导致我的实际网站出现问题?快速替换所有这些实例似乎要容易得多。我考虑过编写一个小例程来追加: with Request.Url.Port,但使用Request.Url.Authority似乎更容易。太容易了......

我试图在线和在MSDN上研究我的问题,但我没有看到答案。

2 个答案:

答案 0 :(得分:17)

根据MSDN Authority包含端口号,而Host则没有。另一方面是Authority将在必要时转义保留字符。

在不知道你的应用程序的情况下很难说这是不是一个好主意,但总的来说我会怀疑它不会破坏任何东西......所以继续......

另一种选择是运行应用程序IIS而不是IIS Express ...

答案 1 :(得分:2)

我的问题是它总是添加端口,即使不需要端口也是如此。在某些情况下,这可能会导致多个服务器出现问题例如,在一对负载均衡的Web服务器上的防火墙后面的生产服务器环境中,它会保留防火墙端口,但这导致URL因端口而中断绑定到服务器场中的特定Web服务器,该服务器无法通过防火墙正确映射。如果你在多个服务器上使用它,我会非常小心这个方法。它导致我们的应用程序出现问题,必须恢复使用Url.Host。此外,它使生产网址看起来与端口号看起来很奇怪。