ASP.NET MVC - 寻找绝对路径从控制器App_Data文件夹(ASP.NET MVC -

2019-06-18 10:38发布

什么是找到一个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中并坚持它的应用程序级的变量?

Answer 1:

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参考:

HttpServerUtility.MapPath方法



Answer 2:

string path = AppDomain.CurrentDomain.GetData("DataDirectory").ToString();

这是得到它的最“正确”的方式。



Answer 3:

我尝试使用习惯得到HostingEnvironment而不是Server ,因为它的工作原理的WCF服务的范围内了。

 HostingEnvironment.MapPath(@"~/App_Data/PriceModels.xml");


Answer 4:

最正确的方法是使用HttpContext.Current.Server.MapPath("~/App_Data"); 。 这意味着你只能从其中一个方法来检索路径HttpContext是可用的。 这是有道理的:在App_Data目录是一个Web项目的文件夹结构[1]。

如果你需要从一个类路径到〜/ App_Data文件,你没有访问HttpContext ,你可以随时使用IoC容器注入提供者接口:

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



Answer 5:

菲尔·哈克有,我认为与疯狂“\”风格目录分隔路径打交道时是一个比较稳定的一个例子。 它也安全地处理路径的级联。 它有在System.IO免费

var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);

但是,你也可以尝试“AppDomain.CurrentDomain.BaseDirector”而不是“使用Server.Mappath”。



Answer 6:

string filePath = HttpContext.Current.Server.MapPath("~/folderName/filename.extension");

要么

string filePath = HttpContext.Server.MapPath("~/folderName/filename.extension");


Answer 7:

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);

这是获得什么恰好需要对于现在的路径的最佳解决方案



文章来源: ASP.NET MVC - Find Absolute Path to the App_Data folder from Controller