Server.MapPath ("."), Server.MapPath ("~"), Server.MapPath (@ "\"), Server.MapPath ("/"). Qual é a diferença?

446

Alguém pode explicar a diferença entre Server.MapPath("."), Server.MapPath("~"), Server.MapPath(@"\")e Server.MapPath("/")?

Manu
fonte

Respostas:

809

Server.MapPath especifica o caminho relativo ou virtual para mapear para um diretório físico .

  • Server.MapPath(".")1 retorna o diretório físico atual 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:

Digamos que você apontou um aplicativo de site ( http://www.example.com/) para

C:\Inetpub\wwwroot

e instalou seu aplicativo de loja (sub-web como diretório virtual no IIS, marcado como aplicativo) em

D:\WebApps\shop

Por exemplo, se você chamar Server.MapPath()na seguinte solicitação:

http://www.example.com/shop/products/GetProduct.aspx?id=2342

então:

  • Server.MapPath(".")1 retornaD:\WebApps\shop\products
  • Server.MapPath("..") retorna D:\WebApps\shop
  • Server.MapPath("~") retorna D:\WebApps\shop
  • Server.MapPath("/") retorna C:\Inetpub\wwwroot
  • Server.MapPath("/shop") retorna D:\WebApps\shop

Se o Path iniciar com uma barra ( /) ou barra invertida ( \), ele MapPath()retornará um caminho como se Path fosse um caminho virtual completo.

Se Path não iniciar com uma barra, ele MapPath()retornará um caminho relativo ao diretório da solicitação que está sendo processada.

Nota: em C #, @é o operador literal literal da cadeia, o que significa que a cadeia deve ser usada "como está" e não deve ser processada para seqüências de escape.

Notas de rodapé

  1. Server.MapPath(null)e Server.MapPath("")vai produzir este efeito também .
splattne
fonte
44
Excelente. Estamos lutando com o Server.Bloody.MapPath. Obrigado
gbn
26
Você será melhor fora de usar HostingEnvironment.MapPath, uma vez que não requer HttpContext: stackoverflow.com/q/944219/3205
skolima
25

Apenas para expandir um pouco a resposta de @ splattne:

MapPath(string virtualPath) chama o seguinte:

public string MapPath(string virtualPath)
{
    return this.MapPath(VirtualPath.CreateAllowNull(virtualPath));
}

MapPath(VirtualPath virtualPath)por sua vez, chamadas MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping)que contêm o seguinte:

//...
if (virtualPath == null)
{
    virtualPath = VirtualPath.Create(".");
}
//...

Então, se você ligar MapPath(null)ou MapPath(""), você está efetivamente ligandoMapPath(".")

dav_i
fonte
4

1) Server.MapPath(".")- Retorna o "Diretório físico atual" do arquivo (por exemplo aspx) sendo executado.

Ex. Suponha D:\WebApplications\Collage\Departments

2) Server.MapPath("..")- Retorna o "Diretório pai"

Ex. D:\WebApplications\Collage

3) Server.MapPath("~")- Retorna o "Caminho físico para a raiz do aplicativo"

Ex. D:\WebApplications\Collage

4) Server.MapPath("/")- Retorna o caminho físico para a raiz do Nome de Domínio

Ex. C:\Inetpub\wwwroot

Vaibhav_Welcome_You
fonte