¿Cuál es la diferencia entre Server.MapPath y HostingEnvironment.MapPath?

174

¿Hay alguna diferencia entre Server.MapPath()y HostingEnvironment.MapPath()? ¿ Server.MapPath()Tiene alguna ventaja sobre HostingEnvironment.MapPath()?

Mi problema original era asignar la ruta del archivo en un servidor cuando HttpContextno está presente y no puedo pasar una Servervariable Global.asaxa mi método.

En su HostingEnvironment.MapPath()lugar lo utilicé ya que no necesita HttpContext. ¿Hay alguna situación en la que estos dos métodos den resultados diferentes?

empi
fuente

Respuestas:

204

Server.MapPath()finalmente llama HostingEnvironment.MapPath(), pero crea un VirtualPathobjeto con opciones específicas:

El VirtualPathobjeto pasado a HostingEnvironment.MapPath()se construye así:

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

Editar : en realidad, la única diferencia es que puede pasar nulo a Server.MapPath(), pero no aHostingEnvironment.MapPath()

Philippe Leybaert
fuente
2
Entonces siempre obtendré los mismos resultados de ambos métodos, ¿verdad? (excluyendo argumento nulo)
empi
61
TL; DR : siempre se usa HostingEnvironment.MapPath()para mantener la cordura. (+1)
Chris Marisic
15
Debe haber algo diferente más allá de nulo porque Server.MapPath("myFolder")funciona bien, pero para obtener el mismo resultado con HostingEnvironment, tuve que usarlo HostingEnvironment.MapPath("~/myFolder").
styfle
Fantástica respuesta para iniciar una sesión ftp a través de una llamada a un servicio web. Me salvó enorme hoy!
htm11h
10
En realidad, hay otra diferencia: las rutas relativas (por ejemplo, Image / pict.png) no están permitidas con HostingEnvironment.MapPath.
NetMage
113

Server.MapPath()requiere un HttpContext. HostingEnvironment.MapPathno.

Mark Struzinski
fuente
2
pero ambos requieren, System.Web¿funcionarán con entornos OWIN autohospedados?
vibs2006