2009-06-03 15 views
148

¿Hay alguna diferencia entre Server.MapPath() y HostingEnvironment.MapPath()? ¿Tiene Server.MapPath() alguna ventaja sobre HostingEnvironment.MapPath()?¿Cuál es la diferencia entre Server.MapPath y HostingEnvironment.MapPath?

Mi problema original fue mapear la ruta del archivo en un servidor cuando el HttpContext no está presente y no puedo pasar una variable Server de Global.asax a mi método.

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

Respuesta

174

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

El objeto VirtualPath 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 al Server.MapPath(), pero no a HostingEnvironment.MapPath()

+2

Así que siempre obtendré los mismos resultados con ambos métodos, ¿verdad? (excluyendo el argumento nulo) – empi

+2

sí, lo haría. –

+48

** TL; DR **: siempre use 'HostingEnvironment.MapPath()' para mantener la cordura. (+1) –

99

Server.MapPath() requiere HttpContext. HostingEnvironment.MapPath no.

Cuestiones relacionadas