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

  

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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top