19

我继承了一个用 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 上研究我的问题,但我没有看到答案。

4

2 回答 2

25

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

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

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

于 2013-08-18T20:34:42.790 回答
2

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

于 2015-03-09T22:47:31.370 回答