Request.Url.Host vs Request.Url.Authority



我继承了一个用C#编写的ASP.NET web应用程序。在整个网站的许多页面中,主机名是使用检索的

BaseHost = Request.Url.Host;

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

我看到我可以通过将代码更改为:来克服这个问题

BaseHost = Request.Url.Authority;

这似乎是通过在本地运行时(localhost:4652)和发布到临时服务器(development.mysite.com)时包含端口来修复的。

我的问题是:这种形式不好吗?这会在我的直播网站上造成问题吗?快速替换所有这些实例似乎要容易得多。我曾考虑过编写一个小例程来附加: with Request.Url.Port,但仅使用Request.Url.Authority似乎更容易。也许太容易了。。。

我试着在网上和MSDN上研究我的问题,但没有找到答案。

根据MSDN,Authority包含端口号,而Host不包含。另一个方面是,如果需要,Authority将转义保留字符。

在不了解您的应用程序的情况下,很难说这是否是一个好主意,但总的来说,我怀疑它不会破坏任何东西。。。所以继续吧。。。

另一个选项是运行应用程序IIS,而不是IIS Express。。。

我的问题是它总是添加端口,即使不需要端口。在某些情况下,这可能会导致多台服务器出现问题。例如,在一对负载平衡的web服务器的防火墙后面的生产服务器环境中,它一直将防火墙端口放在适当的位置,但这导致URL中断,因为该端口连接到服务器场中的特定web服务器,而该服务器无法通过防火墙正确映射。因此,如果你在多个服务器上使用这种方法,我会非常小心。它给我们的应用程序带来了一个突破性的问题,不得不恢复使用Url.Host。此外,它还让生产web Url的端口号看起来很奇怪。

最新更新