obtendo o URL base da raiz do site (url absoluto/relativo)
-
23-09-2019 - |
Pergunta
Quero entender completamente como usar endereços de URL relativos e absolutos em arquivos estáticos e dinâmicos.
~ :
/ :
.. : in a relative URL indicates the parent directory
. : refers to the current directory
/ : always replaces the entire pathname of the base URL
// : always replaces everything from the hostname onwards
Este exemplo é fácil quando você está trabalhando sem diretório virtual.Mas estou trabalhando no diretório virtual.
Relative URI Absolute URI
about.html http://WebReference.com/html/about.html
tutorial1/ http://WebReference.com/html/tutorial1/
tutorial1/2.html http://WebReference.com/html/tutorial1/2.html
/ http://WebReference.com/
//www.internet.com/ http://www.internet.com/
/experts/ http://WebReference.com/experts/
../ http://WebReference.com/
../experts/ http://WebReference.com/experts/
../../../ http://WebReference.com/
./ http://WebReference.com/html/
./about.html http://WebReference.com/html/about.html
Quero simular um site abaixo, como o meu projeto que está funcionando em diretório virtual.
Estas são minhas pastas aspx e ascx
http://hostAddress:port/virtualDirectory/MainSite/ASPX/default.aspx
http://hostAddress:port/virtualDirectory/MainSite/ASCX/UserCtrl/login.ascx
http://hostAddress:port/virtualDirectory/AdminSite/ASPX/ASCX/default.aspx
Estes são meus arquivos JS (que serão usados tanto com os arquivos aspx quanto com os arquivos ascx):
http://hostAddress:port/virtualDirectory/MainSite/JavascriptFolder/jsFile.js
http://hostAddress:port/virtualDirectory/AdminSite/JavascriptFolder/jsFile.js
este é o endereço estático da minha página da web (quero mostrar algumas fotos e executar algumas funções js):
http://hostAddress:port/virtualDirectory/HTMLFiles/page.html
esta é minha pasta de imagens
http://hostAddress:port/virtualDirectory/Images/PNG/arrow.png
http://hostAddress:port/virtualDirectory/Images/GIF/arrow.png
se eu quiser escrever o link do arquivo de imagem no meu arquivo ASPX, devo escrever
aspxImgCtrl.ImageUrl = Server.MapPath("~")+"/Images/GIF/arrow.png";
Mas se eu quiser escrever o caminho codificado ou a partir de um arquivo javascript, que tipo de endereço de URL deve ser?
Solução
O operador ~ é reconhecido pelo asp.net apenas para controles de servidor e no código do servidor.Você não pode usar o operador ~ para elementos do cliente.
As referências de caminho absolutas e relativas em um controle de servidor têm as seguintes desvantagens:
•Caminhos absolutos não são portáveis entre aplicativos.Se você mover o aplicativo para o qual o caminho absoluto aponta, os links serão quebrados.
•Caminhos relativos no estilo dos elementos do cliente podem ser difíceis de manter se você mover recursos ou páginas para pastas diferentes.
Para superar essas desvantagens, o ASP.NET inclui o operador raiz do aplicativo Web (~), que você pode usar ao especificar um caminho nos controles do servidor.ASP.NET resolve o operador ~ para a raiz do aplicativo atual.Você pode usar o operador ~ em conjunto com pastas para especificar um caminho baseado na raiz atual.
Quanto ao exemplo que você postou
aspxImgCtrl.ImageUrl = Server.MapPath("~")+"/Images/GIF/arrow.png";
o código acima renderizará o caminho físico do servidor (por exemplo - c:\inetpub\wwwroot\mysite\images\gif\arrow.png" que significa menos no lado do cliente,
você deve usar isso para o caminho relativo correto do cliente:
aspxImgCtrl.ImageUrl = "~/Images/GIF/arrow.png";
Para fazer referência a recursos de javascript, você pode considerar uma estrutura de pastas de um nível para unificar os caminhos de acesso.por exemplo:
- Páginas
- JS
- Pix
- etc...
Para mais detalhes visite caminhos do site asp.net