Un mapa de la ruta del archivo físico en asp.net mvc
-
26-09-2019 - |
Pregunta
Estoy intentando leer un archivo XSLT desde el disco en mi controlador de ASP.Net MVC. Lo que estoy haciendo es el siguiente:
string filepath = HttpContext.Request.PhysicalApplicationPath;
filepath += "/Content/Xsl/pubmed.xslt";
string xsl = System.IO.File.ReadAllText(filepath);
Sin embargo, medio camino hacia abajo de este hilo en forums.asp.net existe la siguiente cita ??p>
HttpContext.Current es malo y si utilizarlo en cualquier lugar en su aplicación MVC están haciendo algo mal porque no lo necesita.
Si bien no estoy utilizando 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í.
¿Hay un (mejor o recomendada / práctica) mejor manera de leer archivos del disco en ASP.Net MVC?
Solución
string filePath = Server.MapPath(Url.Content("~/Content/Xsl/"));
No estoy de acuerdo con la idea de que HttpContext.Current
es "malo". No es el martillo para cada problema, pero sin duda es mejor que, por ejemplo, Sesión para cosas que puede hacer bien.
Otros consejos
Si está utilizando WebAPI o no específicamente dentro de una clase de controlador, puede utilizar el siguiente como alternativa:
HostingEnvironment.MapPath("/Content/Xsl/pubmed.xslt")
I tendría la ruta de raíz sitio inyectado en el constructor 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 se refiere a la ruta raíz del sitio se puede expresar con la HostingEnvironment.ApplicationPhysicalPath propiedad estática.