Mapper le chemin du fichier physique dans asp.net mvc

J’essaie de lire un fichier XSLT à partir du disque dans mon contrôleur ASP.Net MVC. Ce que je fais est le suivant:

ssortingng filepath = HttpContext.Request.PhysicalApplicationPath; filepath += "/Content/Xsl/pubmed.xslt"; ssortingng xsl = System.IO.File.ReadAllText(filepath); 

Cependant, à mi-chemin de ce fil sur forums.asp.net, il y a la citation suivante

HttpContext.Current est mal et si vous l’utilisez n’importe où dans votre application mvc, vous faites quelque chose de mal parce que vous n’en avez pas besoin.

Alors que je n’utilise pas Current , je me demande quel est le meilleur moyen de déterminer le chemin physique absolu d’un fichier dans MVC? Pour une raison quelconque (je ne sais pas pourquoi!), HttpContext ne me HttpContext pas.

Existe-t-il un meilleur moyen (ou recommandé / recommandé) de lire les fichiers depuis le disque dans ASP.Net MVC?

 ssortingng filePath = Server.MapPath(Url.Content("~/Content/Xsl/")); 

Je ne suis pas d’accord avec l’idée que HttpContext.Current est “mal”. Ce n’est pas le marteau pour tous les problèmes, mais c’est certainement mieux que, par exemple, Session pour des choses qu’il peut faire correctement.

J’aurais le chemin racine du site injecté dans le constructeur du contrôleur par le framework DI:

 public class HomeController: Controller { private readonly ssortingng _siteRoot; public HomeController(ssortingng siteRoot) { _siteRoot = siteRoot; } public ActionResult Index() { ssortingng filePath = Path.Combine(_siteRoot, @"Content\Xsl\pubmed.xslt"); return File(filePath, "text/xml"); } } 

En ce qui concerne le chemin racine du site, il peut être exprimé avec la propriété statique HostingEnvironment.ApplicationPhysicalPath .

Si vous utilisez WebApi ou non spécifiquement dans une classe de contrôleur, vous pouvez utiliser les options suivantes:

 HostingEnvironment.MapPath("/Content/Xsl/pubmed.xslt")