在ASP中从控制器中找到App_Data文件夹的绝对路径的正确方法是什么?NET MVC项目?我希望能够临时使用.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文件的路径?
全球。Asax,并坚持它的应用程序级变量?
最正确的方法是使用HttpContext.Current.Server.MapPath("~/App_Data");这意味着您只能从HttpContext可用的方法中检索路径。这是有意义的:App_Data目录是一个web项目文件夹结构[1]。
如果你需要从一个无法访问HttpContext的类中获取~/App_Data的路径,你可以使用你的IoC容器注入一个provider接口:
public interface IAppDataPathProvider
{
string GetAppDataPath();
}
使用HttpApplication实现它:
public class AppDataPathProvider : IAppDataPathProvider
{
public string GetAppDataPath()
{
return MyHttpApplication.GetAppDataPath();
}
}
MyHttpApplication的地方。GetAppDataPath看起来像:
public class MyHttpApplication : HttpApplication
{
// of course you can fetch&store the value at Application_Start
public static string GetAppDataPath()
{
return HttpContext.Current.Server.MapPath("~/App_Data");
}
}
[1] http://msdn.microsoft.com/en-us/library/ex526337%28v=vs.100%29.aspx
最正确的方法是使用HttpContext.Current.Server.MapPath("~/App_Data");这意味着您只能从HttpContext可用的方法中检索路径。这是有意义的:App_Data目录是一个web项目文件夹结构[1]。
如果你需要从一个无法访问HttpContext的类中获取~/App_Data的路径,你可以使用你的IoC容器注入一个provider接口:
public interface IAppDataPathProvider
{
string GetAppDataPath();
}
使用HttpApplication实现它:
public class AppDataPathProvider : IAppDataPathProvider
{
public string GetAppDataPath()
{
return MyHttpApplication.GetAppDataPath();
}
}
MyHttpApplication的地方。GetAppDataPath看起来像:
public class MyHttpApplication : HttpApplication
{
// of course you can fetch&store the value at Application_Start
public static string GetAppDataPath()
{
return HttpContext.Current.Server.MapPath("~/App_Data");
}
}
[1] http://msdn.microsoft.com/en-us/library/ex526337%28v=vs.100%29.aspx