¿Cómo puedo usar Server.MapPath () de global.asax?


122

Necesito usar Server.MapPath() para combinar algunas rutas de archivos que almaceno en web.config.

Sin embargo, desde Server.MapPath() basa en el HttpContext actual (creo), no puedo hacer esto. Cuando intento utilizar el método, aunque está "disponible", obtengo la siguiente excepción:

La operación del servidor no está disponible en este contexto.

¿Hay algún otro método que pueda asignar un directorio relativo a la raíz web, como ~/App_Data/la ruta física completa, como C:\inetpub\wwwroot\project\App_data\?

Respuestas:


295

Puede probar System.Web.Hosting.HostingEnvironment.MapPath () .

No se requiere HttpContext.


¿Alguna advertencia sobre esta técnica?
John Bubriski

10
No Si enciende Reflector, notará que Server.MapPath y Request.MapPath finalmente llaman a VirtualPath.MapPath que finalmente llama a HostingEnvironment.MapPath. Todos terminan en el mismo lugar. HostingEnvironment.MapPath elimina al intermediario.
Corbin Marzo

1
Esto solucionó un proyecto de código abierto que funcionaba para mí y luego dejó de inicializarse debido a que HttpContext.Current.Server explotó porque no tenía un contexto por alguna razón. Cambiando a esto lo devolvió a la navegación sin problemas.
Chris Marisic

4

Uso AppDomain.CurrentDomain.BaseDirectoryporque Contextpodría volver nulo !!


1

Cuando esté en Global.asax, use el objeto de contexto :

context.Server.mappath ()

El contexto le permite acceder también a la colección de sesiones, el objeto de solicitud, el objeto de respuesta. Muy útil cuando quieres registrar errores, por ejemplo


No hay garantía Contexten Global.asax.
Anders Tornblad

-3

Podrías probar HttpContext.Current.Server.MapPath ("/") - Así es como lo he referenciado antes en las clases.


2
Puede hacer referencia a eso en clases que realmente TIENEN un HttpContext, pero no creo que global.asax tenga uno, de ahí el mensaje de error que recibí.
John Bubriski
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.