从ASP.NET MVC项目中的Controller查找App_Data文件夹的绝对路径的正确方法是什么?我希望能够临时使用.xml文件,我不想硬编码路径 .
这不起作用:
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
string path = VirtualPathUtility.ToAbsolute("~/App_Data/somedata.xml");
//.... do whatever
return View();
}
}
我认为在Web上下文之外VirtualPathUtility.ToAbsolute()不起作用 . 字符串路径返回“C:\ App_Data \ somedata.xml”
我应该在哪里确定MVC应用程序中.xml文件的路径? global.asax并坚持使用应用程序级变量?
7 回答
Phil Haak有一个例子,我认为在使用疯狂的“\”样式目录分隔符处理路径时会更稳定一些 . 它还安全地处理路径连接 . 它在System.IO中免费提供
但是,您也可以尝试“AppDomain.CurrentDomain.BaseDirector”而不是“Server.MapPath” .
要么
ASP.NET MVC1 - > MVC3
ASP.NET MVC4
MSDN参考:
HttpServerUtility.MapPath Method
这是获得它的最“正确”方式 .
我试图养成使用
HostingEnvironment
而不是Server
的习惯,因为它也适用于WCF服务的上下文 .最正确的方法是使用
HttpContext.Current.Server.MapPath("~/App_Data");
. 这意味着您只能从HttpContext
可用的方法中检索路径 . 这是有道理的:App_Data目录是一个Web项目文件夹结构[1] .如果您需要从无法访问
HttpContext
的类中获取〜/ App_Data的路径,则始终可以使用IoC容器注入提供程序接口:使用
HttpApplication
实现它:MyHttpApplication.GetAppDataPath
的样子:[1] http://msdn.microsoft.com/en-us/library/ex526337%28v=vs.100%29.aspx
这是获得现在最需要的路径的最佳解决方案