¿Cuál es la forma correcta de encontrar la ruta absoluta a la carpeta App_Data desde un controlador en un proyecto ASP.NET MVC? Me gustaría poder trabajar temporalmente con un archivo .xml y no quiero codificar la ruta.
Esto no funciona:
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
string path = VirtualPathUtility.ToAbsolute("~/App_Data/somedata.xml");
//.... do whatever
return View();
}
}
Creo que fuera del contexto web VirtualPathUtility.ToAbsolute () no funciona. la ruta de la cadena vuelve como "C: \ App_Data \ somedata.xml"
¿Dónde debo determinar la ruta del archivo .xml en una aplicación MVC? global.asax y pegarlo una variable de nivel de aplicación?
.net
asp.net-mvc
absolute-path
BuddyJoe
fuente
fuente
Respuestas:
ASP.NET MVC1 -> MVC3
ASP.NET MVC4
Referencia de MSDN:
Método HttpServerUtility.MapPath
fuente
Current
oServer.MapPath(...)
como mencionó SeriousM.System.Web.Hosting.HostingEnvironment.MapPath()
Esta es probablemente una forma más "correcta" de obtenerlo.
fuente
Intento acostumbrarme a usarlo en
HostingEnvironment
lugar de hacerlo,Server
ya que también funciona dentro del contexto de los servicios WCF.fuente
System.Web.Hosting
espacio de nombres en caso de que alguien necesite saber lo relevanteusing
. Ref: docs.microsoft.com/en-us/dotnet/api/…La forma más correcta es usar
HttpContext.Current.Server.MapPath("~/App_Data");
. Esto significa que solo puede recuperar la ruta de un método dondeHttpContext
está disponible. Tiene sentido: el directorio App_Data es una estructura de carpetas de proyectos web [1].Si necesita la ruta a ~ / App_Data desde una clase a la que no tiene acceso
HttpContext
, siempre puede inyectar una interfaz de proveedor utilizando su contenedor IoC:Impleméntelo usando su
HttpApplication
:Donde se
MyHttpApplication.GetAppDataPath
ve así:[1] http://msdn.microsoft.com/en-us/library/ex526337%28v=vs.100%29.aspx
fuente
HttpContext.Current
vez no esté disponible en un solo lugar, si usted lo está utilizando - a través de un contenedor IoC - en otro lugar? ¿Dónde no estaría disponible la propiedad estática?Phil Haak tiene un ejemplo que creo que es un poco más estable cuando se trata de rutas con separadores de directorios de estilo "\". También maneja con seguridad la concatenación de rutas. Viene gratis en System.IO
Sin embargo, también puede probar "AppDomain.CurrentDomain.BaseDirector" en lugar de "Server.MapPath".
fuente
O
fuente
esta es la mejor solución para obtener el camino que es exactamente lo que necesita por ahora
fuente