Server.MapPath ( “”), Server.MapPath ( “~”), Server.MapPath (@ “\”), Server.MapPath ( “/”). Qual é a diferença?
-
07-07-2019 - |
Pergunta
Alguém pode explicar a diferença entre Server.MapPath(".")
, Server.MapPath("~")
, Server.MapPath(@"\")
e Server.MapPath("/")
?
Solução
Server.MapPath especifica o caminho relativo ou virtual para mapear para um diretório físico .
-
Server.MapPath(".")
1 retorna o diretório atual físico do arquivo (por exemplo, aspx) sendo executado -
Server.MapPath("..")
retorna o diretório pai -
Server.MapPath("~")
retorna o caminho físico para a raiz do aplicativo -
Server.MapPath("/")
retorna o caminho físico para a raiz do nome de domínio (não é necessariamente o mesmo que a raiz do aplicativo)
Um exemplo:
Vamos dizer que você apontou uma aplicação web site (http://www.example.com/
) para
C:\Inetpub\wwwroot
e instalou o aplicativo loja (sub web como diretório virtual no IIS, marcado como aplicativo) em
D:\WebApps\shop
Por exemplo, se você chamar Server.MapPath()
no seguinte pedido:
http://www.example.com/shop/products/GetProduct.aspx?id=2342
então:
-
Server.MapPath(".")
1 retornosD:\WebApps\shop\products
-
Server.MapPath("..")
retornosD:\WebApps\shop
-
Server.MapPath("~")
retornosD:\WebApps\shop
-
Server.MapPath("/")
retornosC:\Inetpub\wwwroot
-
Server.MapPath("/shop")
retornosD:\WebApps\shop
Se o caminho começa com uma barra invertida (/
) ou barra invertida (\
), o MapPath()
retorna um caminho como se caminho era um caminho completo, virtual.
Se Path não começar com uma barra, o MapPath()
retorna um caminho relativo ao diretório do pedido está sendo processado.
. Nota: em C #, @
é o significado literal operador corda textualmente que a cadeia deve ser usado "como está" e não ser processado por sequências de escape
Notas de rodapé
-
Server.MapPath(null)
eServer.MapPath("")
vai produzir este efeito também .
Outras dicas
Apenas para expandir @ resposta de splattne um pouco:
MapPath(string virtualPath)
chama o seguinte:
public string MapPath(string virtualPath)
{
return this.MapPath(VirtualPath.CreateAllowNull(virtualPath));
}
MapPath(VirtualPath virtualPath)
por sua vez chama MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping)
que contém o seguinte:
//...
if (virtualPath == null)
{
virtualPath = VirtualPath.Create(".");
}
//...
Então, se você chamar MapPath(null)
ou MapPath("")
, você está efetivamente chamando MapPath(".")
1) Server.MapPath(".")
-. Retorna o "Diretório atual Física" do arquivo (por exemplo aspx
) sendo executado
Ex. D:\WebApplications\Collage\Departments
Suponha
2) Server.MapPath("..")
- retorna a "Parent Directory"
Ex. D:\WebApplications\Collage
3) Server.MapPath("~")
- Retorna o "caminho físico para a raiz da aplicação"
Ex. D:\WebApplications\Collage
4) Server.MapPath("/")
- Retorna o caminho físico para a raiz do Nome de Domínio
Ex. C:\Inetpub\wwwroot