¿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?

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


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.


2
pero ambos requieren, System.Web¿funcionarán con entornos OWIN autohospedados?
vibs2006
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.