在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,并坚持它的应用程序级变量?


当前回答

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

OR

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

其他回答

ASP。Net mvc1 -> mvc3

string path = HttpContext.Current.Server.MapPath("~/App_Data/somedata.xml");

ASP。净MVC4

string path = Server.MapPath("~/App_Data/somedata.xml");

MSDN参考:

HttpServerUtility。MapPath方法

这样我就得到了主机路径。

using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;

namespace IHostingEnvironmentExample.Controllers
{
    public class HomeController : Controller
    {
        private IHostingEnvironment _env;
        public HomeController(IHostingEnvironment env)
        {
            _env = env;
        }
        public IActionResult Index()
        {
            var webRoot = _env.WebRootPath;
            var file = System.IO.Path.Combine(webRoot, "test.txt");
            System.IO.File.WriteAllText(file, "Hello World!");
            return View();
        }
    }
}

https://forums.asp.net/t/1696005.aspx?How+to+get+Local+Server+path+in+mvc

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

OR

string filePath = HttpContext.Server.MapPath("~/folderName/filename.extension");
string path = AppDomain.CurrentDomain.GetData("DataDirectory").ToString();

这可能是一种更“正确”的理解方式。

我试图养成使用HostingEnvironment而不是Server的习惯,因为它也可以在WCF服务的上下文中工作。

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