Asigne la ruta del archivo físico en asp.net mvc
asp.net-mvc filepath (3)
Me gustaría tener la ruta de acceso de raíz del sitio inyectado en el constructor del controlador por el marco DI:
public class HomeController: Controller
{
private readonly string _siteRoot;
public HomeController(string siteRoot)
{
_siteRoot = siteRoot;
}
public ActionResult Index()
{
string filePath = Path.Combine(_siteRoot, @"Content/Xsl/pubmed.xslt");
return File(filePath, "text/xml");
}
}
En lo que respecta a la ruta de la raíz del sitio, se puede expresar con la propiedad estática HostingEnvironment.ApplicationPhysicalPath .
Estoy tratando de leer un archivo XSLT desde el disco en mi controlador ASP.Net MVC. Lo que estoy haciendo es lo siguiente:
string filepath = HttpContext.Request.PhysicalApplicationPath;
filepath += "/Content/Xsl/pubmed.xslt";
string xsl = System.IO.File.ReadAllText(filepath);
Sin embargo, a mitad de camino de este hilo en forums.asp.net está la siguiente cita
HttpContext.Current es malo y si lo usas en cualquier lugar de tu aplicación mvc, estás haciendo algo mal porque no lo necesitas.
Si bien no estoy usando Current
, me pregunto cuál es la mejor manera de determinar la ruta física absoluta de un archivo en MVC. Por alguna razón (¡no sé por qué!) HttpContext
no se siente bien para mí.
¿Existe una mejor (o recomendada / mejor práctica) forma de leer archivos del disco en ASP.Net MVC?
Si está utilizando WebApi o no específicamente dentro de una clase de controlador, puede usar lo siguiente como alternativa:
HostingEnvironment.MapPath("/Content/Xsl/pubmed.xslt")
string filePath = Server.MapPath(Url.Content("~/Content/Xsl/"));
No estoy de acuerdo con la idea de que HttpContext.Current
es "malvado". No es el martillo para cada problema, pero ciertamente es mejor que, por ejemplo, la sesión para cosas que puede hacer bien.