为什么应用程序根“〜”解析为ASP.NET中的站点根“/”?

时间:2012-08-21 09:14:18

标签: asp.net iis relative-path visual-studio-2012 virtual-path

我有一个在Visual Studio 2012下开发的ASP.NET Web窗体站点。有一个带导航栏的主页面和指向CSS表格的链接。使用application root运算符“〜”

指定机器人
<asp:PlaceHolder runat="server">
    <%: Styles.Render("~/Content/themes/base/css", "~/Content/css") %>
</asp:PlaceHolder>
...
<li><a runat="server" href="~/Forms/SelectResults.aspx">Generate Table</a></li>
<li><a runat="server" href="~/BrowseDB.aspx">Browse DB</a></li>

浏览页面http://localhost/Forms/SelectResults.aspx时,我发现“〜”在这些情况下的解析方式不同:

<link href="/Content/site.css" rel="stylesheet" type="text/css" />
...
<li><a href="SelectResults.aspx">Generate Table</a></li>
<li><a href="../BrowseDB.aspx">Browse DB</a></li>

因此CSS的路径是绝对的,其他页面的路径是相对的。在localhost上运行时,一切正常。但是在将我的站点部署到服务器后,它的地址为http://MyDomain/MySite/,因此它不在域根目录中。而且由于绝对路径,不能加载任何CSS文件!导航工作正常,但所有样式都毁了。

为什么“〜”运算符不在Styles.Render指令中工作?这两个代码片段都是由标准的ASP.NET网站模板生成的,我没有修改任何内容。

网站是在Visual Studio 2012,.NET Framework 4.5下开发的。我的服务器规格是:

  • Windows 7 x64
  • IIS 7.5
  • 网站应用程序池框架4.0

1 个答案:

答案 0 :(得分:0)

问题原因是我们的代理服务器实际上将http://MyDomain/MySite/转发给http://InternalDomain:InternalPort/。对于该内部域应用程序,root实际上是站点根目录。