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

StackOverflow https://stackoverflow.com/questions/275781

Pergunta

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

Foi útil?

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 retornos D:\WebApps\shop\products
  • Server.MapPath("..") retornos D:\WebApps\shop
  • Server.MapPath("~") retornos D:\WebApps\shop
  • Server.MapPath("/") retornos C:\Inetpub\wwwroot
  • Server.MapPath("/shop") retornos D:\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é

  1. Server.MapPath(null) e Server.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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top