覆盖应用程序根URL真的有什么作用?

整个互联网上唯一的地方我可以在MSDN上找到解释:

指定应用程序根URL的备用路径。 如果Web应用程序根目录不是项目的根目录,请使用此选项。

从这里我理解“应用程序根”是在ASP.NET中使用波浪号时检索的路径。 所以我希望如果我去项目的属性 – Web – “覆盖应用程序root”并指定另一个url,那么代字号将映射到该url。

但事实并非如此。 例如,我的Web位于虚拟目录 – http://localhost/WebApplication1和“覆盖应用程序根”上我尝试指定http://localhost/WebApplication2http://localhosthttp://WebApplication2 (全部存在于我的本地IIS)。 现在我写的时候

 Response.Redirect("~/test2/login"); 

我希望它能将我重定向到http://localhost/WebApplication2/test2/login 。 但它改为将我重定向到http://localhost/WebApplication1/test2/login ,就像我没有覆盖“应用程序根”一样。

那么这个function真的应该做什么呢? 或者也许它不起作用,因为我遗漏了一些东西并没有正确定义它?

覆盖应用程序根URL不会更改应用程序根目录在应用程序中的位置。 它会更改用于访问应用程序根目录的URL。 因为IIS执行了一些主机名validation,所以它用于指定是否要通过localhost:[PORT]以外的方式访问您的应用程序localhost:[PORT]

例如,如果您将其覆盖到www.myapp.com ,则可以通过将其添加到您的hosts文件来访问您的应用程序:

 127.0.0.1 www.myapp.com 

如果您将应用程序提供给远程设备(计算机上的虚拟机或网络上的移动设备),则这​​可能特别有用,因为它们无法导航到localhost作为应用程序地址。