为什么应用程序根目录“~”在 ASP.NET 中解析为站点根目录“/”?

为什么应用程序根目录“~”在 ASP.NET 中解析为站点根目录“/”?

我有一个在 Visual Studio 2012 下开发的 ASP.NET Web 表单网站。有一个带有导航栏和 CSS 表链接的母版页。Bot 是使用应用程序根目录运算符“~”

<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 路径是绝对路径,而其他页面路径是相对路径。在本地主机上运行时,一切正常。但在将我的网站部署到服务器后,它有一个地址http://MyDomain/MySite/,因此它不在域根目录中。而且由于绝对路径,无法加载任何 CSS 文件!导航工作正常,但所有样式都被破坏了。

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

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

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

答案1

问题是由我们的代理服务器引起的,它实际上转发http://MyDomain/MySite/到了http://InternalDomain:InternalPort/。并且对于该内部域,应用程序根目录实际上是站点根目录。

相关内容