Respostas:
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 executadoServer.MapPath("..")
retorna o diretório paiServer.MapPath("~")
retorna o caminho físico para a raiz do aplicativoServer.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é
Server.MapPath(null)
e Server.MapPath("")
vai produzir este efeito também .HostingEnvironment.MapPath
, uma vez que não requer HttpContext
: stackoverflow.com/q/944219/3205
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(".")
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