Por que a raiz do aplicativo “~” resolve a raiz do site “/” no ASP.NET?

1

Eu tenho um site ASP.NET Web Forms desenvolvido sob o Visual Studio 2012. Há uma página mestra com barra de navegação e links para tabelas CSS. Bot são especificados usando o operador raiz da aplicação "~"

<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>

Ao navegar na página http://localhost/Forms/SelectResults.aspx , vejo que o "~" é resolvido de forma diferente para estes casos:

<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>

Assim, o caminho para o CSS é absoluto e o caminho para outras páginas é relativo. Quando rodando em localhost, tudo funciona bem. Mas depois de implantar meu site no servidor, ele tem um endereço http://MyDomain/MySite/ , portanto, ele não está localizado na raiz do domínio. E por causa de caminhos absolutos, nenhum arquivo CSS pode ser carregado! A navegação funciona bem, mas todos os estilos estão arruinados.

Por que o operador "~" não funciona na diretiva Styles.Render ? Ambos os trechos de código foram gerados pelo modelo de site padrão do ASP.NET, eu não modifiquei nada.

O site foi desenvolvido no Visual Studio 2012, .NET Framework 4.5. As especificações do meu servidor são:

  • Windows 7 x64
  • IIS 7.5
  • Estrutura do pool de aplicativos do site 4.0
por Mikhail 21.08.2012 / 11:03

1 resposta

1

O problema foi causado pelo nosso servidor proxy, que realmente encaminha http://MyDomain/MySite/ para http://InternalDomain:InternalPort/ . E para essa raiz do aplicativo de domínio interno, na verdade, era uma raiz do site.

    
por 21.08.2012 / 13:26