在 asp.net mvc 中映射物理文件路径
Posted
技术标签:
【中文标题】在 asp.net mvc 中映射物理文件路径【英文标题】:Map the physical file path in asp.net mvc 【发布时间】:2011-02-19 13:36:32 【问题描述】:我正在尝试从我的 ASP.Net MVC 控制器中的磁盘读取 XSLT 文件。我正在做的事情如下:
string filepath = HttpContext.Request.PhysicalApplicationPath;
filepath += "/Content/Xsl/pubmed.xslt";
string xsl = System.IO.File.ReadAllText(filepath);
但是,half way down this thread on forums.asp.net 有以下引用
HttpContext.Current 是邪恶的,如果你 在您的 mvc 应用程序中的任何地方使用它 做错事是因为你 不需要。
虽然我没有使用Current
,但我想知道在 MVC 中确定文件的绝对物理路径的最佳方法是什么?出于某种原因(我不知道为什么!)HttpContext
不适合我。
在 ASP.Net MVC 中是否有更好(或推荐/最佳实践)从磁盘读取文件的方法?
【问题讨论】:
【参考方案1】:string filePath = Server.MapPath(Url.Content("~/Content/Xsl/"));
我不同意HttpContext.Current
是“邪恶”的观点。它不是解决所有问题的锤子,但它肯定比 Session 更好。
【讨论】:
呃!Url
在哪里定义?我在引用中添加了System.Web.Mvc
(和using
语句),但它仍然没有定义。
这是Controller
msdn.microsoft.com/en-us/library/…的属性【参考方案2】:
如果您在控制器类中使用或未专门使用 WebApi,则可以使用以下替代方法:
HostingEnvironment.MapPath("/Content/Xsl/pubmed.xslt")
【讨论】:
【参考方案3】:我会通过 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");
就站点根路径而言,它可以用HostingEnvironment.ApplicationPhysicalPath 静态属性表示。
【讨论】:
好主意!!无论如何,在 .NET 世界中,人们应该在应用程序中使用更多的 IoC……我们使用的不够多。以上是关于在 asp.net mvc 中映射物理文件路径的主要内容,如果未能解决你的问题,请参考以下文章