在asp.net mvc中映射物理文件path

我想在我的ASP.Net MVC控制器从磁盘读取XSLT文件。 我正在做的是以下几点:

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

然而, 在forums.asp.net上的这个线程的一半是下面的引用

HttpContext.Current是邪恶的,如果你在你的mvc应用程序的任何地方使用它,你做错了什么,因为你不需要它。

虽然我不使用Current ,但我想知道在MVC中确定文件的绝对物理path的最佳方法是什么? 出于某种原因(我不知道为什么!) HttpContext不适合我。

有没有更好的(或build议/最佳做法)在ASP.Net MVC磁盘读取文件的方式?

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

我不同意HttpContext.Current是“邪恶”的想法。 这并不是每个问题的重点,但它肯定比例如Session好,它可以做好。

我将通过DI框架将网站根path注入到控制器构造函数中:

 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"); } } 

就站点根path而言,它可以用HostingEnvironment.ApplicationPhysicalPath静态属性表示。

如果您在控制器类中使用WebApi,或者没有专门使用WebApi,则可以使用以下替代方法:

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