Qual é a diferença entre Server.MapPath e HostingEnvironment.MapPath?


174

Existe alguma diferença entre Server.MapPath()e HostingEnvironment.MapPath()? Tem Server.MapPath()alguma vantagem sobre HostingEnvironment.MapPath()?

Meu problema original era mapear o caminho do arquivo em um servidor quando ele HttpContextnão está presente e não consigo passar uma Servervariável Global.asaxpara o meu método.

Eu usei HostingEnvironment.MapPath()vez que não precisa HttpContext. Existem situações em que esses dois métodos fornecerão resultados diferentes?

Respostas:


204

Server.MapPath()eventualmente chama HostingEnvironment.MapPath(), mas cria um VirtualPathobjeto com opções específicas:

O VirtualPathobjeto transmitido para HostingEnvironment.MapPath()é construído assim:

VirtualPath.Create(path, VirtualPathOptions.AllowAllPath|VirtualPathOptions.AllowNull);

Edit : na realidade, a única diferença é que você pode passar nulo para Server.MapPath(), mas não paraHostingEnvironment.MapPath()


2
Então, sempre obterei os mesmos resultados dos dois métodos, certo? (excluindo argumento nulo)
empi 03/06/2009

61
TL; DR : use sempre HostingEnvironment.MapPath()para manter a sanidade. (+1)
Chris Marisic

15
Deve haver algo diferente além de null, porque Server.MapPath("myFolder")funciona bem, mas para obter o mesmo resultado com o HostingEnvironment, eu tive que usar HostingEnvironment.MapPath("~/myFolder").
styfle

Resposta fantástica para iniciar uma sessão ftp através de uma chamada para um serviço web. Me salvou enorme hoje !!!
htm11h

10
Na verdade, há outra diferença - caminhos relativos (por exemplo, Image / pict.png) não são permitidos com HostingEnvironment.MapPath.
NetMage

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.