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


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 .

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(".")


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.