在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")