¿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
CurrentoServer.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
HostingEnvironmentlugar de hacerlo,Serverya que también funciona dentro del contexto de los servicios WCF.fuente
System.Web.Hostingespacio 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 dondeHttpContextestá 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.GetAppDataPathve así:[1] http://msdn.microsoft.com/en-us/library/ex526337%28v=vs.100%29.aspx
fuente
HttpContext.Currentvez 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