ASP.NET MVC - 寻找绝对路径从控制器App_Data文件夹
-
13-09-2019 - |
题
什么是找到一个ASP.NET MVC项目的绝对路径从控制器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”
我应该在哪里确定.xml文件的在MVC应用程序的路径? Global.asax中,贴到一个应用程序级变量?
解决方案
ASP.NET MVC1 - > MVC3
string path = HttpContext.Current.Server.MapPath("~/App_Data/somedata.xml");
ASP.NET MVC4
string path = Server.MapPath("~/App_Data/somedata.xml");
MSDN参考:
其他提示
string path = AppDomain.CurrentDomain.GetData("DataDirectory").ToString();
这是可能得到它的一个更“正确”的方式。
我尝试使用HostingEnvironment
代替Server
的习惯来获得,因为它的工作原理中WCF的情况下也提供服务。
HostingEnvironment.MapPath(@"~/App_Data/PriceModels.xml");
在最正确的方法是使用HttpContext.Current.Server.MapPath("~/App_Data");
。这意味着你只能从哪里HttpContext
可用的方法检索路径。它使感:App_Data目录是web项目文件夹结构[1]
如果你在哪里你没有访问HttpContext
你可以随时使用IoC容器注入提供者接口需要从一个类路径到〜/ App_Data文件:
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 /库/ ex526337%28V = VS.100%29.aspx
菲尔·哈克有,我认为与疯狂“\”风格目录分隔路径打交道时是一个比较稳定的一个例子。它也安全地处理路径的级联。它配备免费在System.IO
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
不过,你也可以尝试 “AppDomain.CurrentDomain.BaseDirector” 而不是 “使用Server.Mappath”。
string filePath = HttpContext.Current.Server.MapPath("~/folderName/filename.extension");
OR
string filePath = HttpContext.Server.MapPath("~/folderName/filename.extension");
string Index = i;
string FileName = "Mutton" + Index + ".xml";
XmlDocument xmlDoc = new XmlDocument();
var path = Path.Combine(Server.MapPath("~/Content/FilesXML"), FileName);
xmlDoc.Load(path); // Can use xmlDoc.LoadXml(YourString);
这是获得什么恰好需要对于现在的路径的最佳解决方案。