У меня есть сайт веб-форм 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/
. И для этого внутреннего домена корень приложения фактически был корнем сайта.