Почему корень приложения "~" преобразуется в корень сайта "/" в ASP.NET?

У меня есть сайт ASP.NET Web Forms, разработанный под Visual Studio 2012. Есть главная страница с панелью навигации и ссылками на таблицы CSS. Бот указывается с помощью корневого оператора приложения "~"

<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
  • Платформа приложений для веб-сайта

1 ответ

Проблема была вызвана нашим прокси-сервером, который на самом деле http://MyDomain/MySite/ в http://InternalDomain:InternalPort/, И для этого корень приложения внутреннего домена фактически был корнем сайта.

Другие вопросы по тегам