Назад | Перейти на главную страницу

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

У меня есть сайт веб-форм ASP.NET, разработанный в 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. Мои характеристики сервера:

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