Tengo algunos procesos que se ejecutan sin un HttpContext en una aplicación web ASP.NET MVC. Este proceso debe poder determinar la ruta física al directorio de contenido de la aplicación para leer/escribir datos. Pero, dado que es sin HttpContext, no consigo usar cosas sofisticadas como Server.MapPath y tal. Sugerencias?¿Cómo se determina la ruta física de un archivo sin HttpContext?
Respuesta
En una página web, lo mejor es utilizar HttpRuntime.AppDomainAppPath
, ya que en ciertos momentos de la ruta de ejecución (es decir, cuando el sitio se pone en marcha), no hay HttpContext.Current
disponible.
Véase también this post.
¿Por qué es HttpRuntime.AppDomainPath mejor que AppDomain.BaseDirectory? ' – Matt
Debido a su semántica. Cuando estás dentro de HttpRuntime, es mejor preguntarle al tiempo de ejecución el camino correcto, en lugar de hurgar a tu alrededor. Además, hace que tu código sea más legible y tu intención sea más clara. Finalmente, las implementaciones pueden cambiar, pero incluso en ese caso, HttpRuntime aún devolverá la ruta correcta y AppDomain no lo hará (lo mismo puede aplicarse al raro caso en el que haya iniciado un dominio de aplicación separado). – Abel
Gracias. Edité arriba porque en realidad es AppDomainAppPath no AppDomainPath (al menos en .NET4) – Matt
La mejor manera de hacerlo es usando la propiedad AppDomain.BaseDirectory
. Siempre que no juegue con dominios de aplicaciones personalizadas, apuntará a su directorio raíz de aplicaciones. En otras palabras; estos dos cuerdas sería la misma:
string mapUsingAppDomain = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Contents");
string mapUsingServer = HttpContext.Current.Server.MapPath("~/Contents");
- 1. Obtener la ruta de la aplicación sin usar httpcontext. (asp.net)
- 2. ¿Cómo sirvo un archivo descargable en línea sin exponer la ruta física?
- 3. ¿Cómo se determina la longitud de un char * sin signo?
- 4. ¿Cómo obtener la ruta del servidor de la ruta física?
- 5. convertir de la ruta física a la ruta virtual
- 6. ¿Cómo abrir la configuración web con la ruta física?
- 7. ¿Cómo se determina la ruta absoluta del archivo de un archivo fuente Java en el plugin de Eclipse?
- 8. elmah: excepciones sin HttpContext?
- 9. Obtención de una ruta virtual relativa desde la ruta física
- 10. Encontrar la ruta física de un dll ISAPI
- 11. Server.MapPath - Ruta física dada, ruta virtual espera
- 12. ¿Cómo se determina la antigüedad del archivo con PHP?
- 13. Ruta a un archivo sin nombre base
- 14. Cómo obtener la ruta física del directorio virtual
- 15. ¿Cómo se determina la longitud de una trama Ethernet II?
- 16. ¿Cómo se determina la ruta y el nombre de la biblioteca compartida de Python?
- 17. ¿Cómo se determina quién emitió la señal?
- 18. SharpLibZip: Agregar archivo sin ruta
- 19. ¿Cómo se lee un archivo (por ejemplo, un archivo txt) de otro paquete java sin especificar la ruta absoluta?
- 20. ¿Cómo se determina la clase de un tipo genérico?
- 21. ¿Cómo se determina la velocidad de un dispositivo Android?
- 22. ELMAH - Excepción de registro sin tener HttpContext
- 23. Cómo obtener un nombre de archivo sin extensión desde la ruta del archivo en Ruby
- 24. Cómo extraer la ruta física de un servicio de Windows utilizando el comando Get-Service
- 25. ¿Cómo se determina la ruta de búsqueda del módulo python en Mac OS X?
- 26. Obtener ruta física aplicación actual dentro Application_Start
- 27. ¿Cómo se determina el uso de stat() si un archivo es un enlace simbólico?
- 28. ¿Cómo obtener la ubicación física de una aplicación web ASP.NET sin usar HttpContext.Current?
- 29. ¿Cómo se determina la clase de la propiedad Objective-C?
- 30. ¿Cómo enviar un archivo zip sin crearlo en una ubicación física?
Incluso si 'HttpContext.Current' puede ser nulo,' Server.MapPath' seguirá funcionando. Si no lo "tiene", ¿tal vez quiere decir que no ve la referencia a 'System.Web'? – Abel
@Abel: "No tendrá" una referencia a "Servidor" para usar .MapPath en, por ejemplo, un constructor estático, porque "Servidor" es una propiedad de HttpContext.Current (y también una propiedad de HttpApplication), tampoco de los cuales estará disponible de manera confiable en dicho contexto estático. "Servidor" es del tipo "HttpServerUtility" cuyo constructor es interno, por lo que no puede usarlo a menos que pueda obtenerlo desde HttpContext.Current o HttpApplication en Global.asax. Por lo tanto, HttpRuntime.AppDomainAppPath es lo que debe usarse, tal como lo publicó en su respuesta a continuación. – Triynko