如果要在经典ASP.NET应用程序中将相对或虚拟路径映射到服务器上的物理目录,您始终可以使用该Server.MapPath()方法查找Web根目录的物理路径,如下所示:

// Classic ASP.NET

public class HomeController : Controller
{
    public ActionResult Index()
    {
        string physicalWebRootPath = Server.MapPath("~/");
        
        return Content(physicalWebRootPath);
    }
}


但是,在ASP.NET Core中,该Server.MapPath()方法不再存在。实际上,Controller基类甚至没有Server属性。

ASP.NET核心
在ASP.NET Core中,可以通过注入和查询服务来检索Web根目录和内容根目录的物理路径IHostingEnvironment:

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

namespace AspNetCorePathMapping
{
    public class HomeController : Controller
    {
        private readonly IHostingEnvironment _hostingEnvironment;

        public HomeController(IHostingEnvironment hostingEnvironment)
        {
            _hostingEnvironment = hostingEnvironment;
        }

        public ActionResult Index()
        {
            string webRootPath = _hostingEnvironment.WebRootPath;
            string contentRootPath = _hostingEnvironment.ContentRootPath;

            return Content(webRootPath + "\n" + contentRootPath);
        }
    }
}


我在我的机器上的〜/ Code / AspNetCorePathMapping目录中创建了一个演示.NET Core应用程序。如果我运行它,上面的控制器操作将返回以下两个路径:


请注意Web根目录和内容根目录之间的区别:Web根目录是从中提供静态内容的根目录,而内容根目录是应用程序基本路径。然后,您可以结合使用任一路径Path.Combine()来构造指向特定文件或目录的物理文件路径。

ASP.NET Core RC1
在ASP.NET Core RC2之前 - 也就是说,直到ASP.NET Core RC1 - 应用程序基本路径可通过IApplicationEnvironment.ApplicationBasePath而不是IHostingEnvironment.ContentRootPath:

using Microsoft.AspNet.Mvc;
using Microsoft.Extensions.PlatformAbstractions;

namespace AspNetCorePathMapping
{
    public class HomeController : Controller
    {
        private readonly IApplicationEnvironment _appEnvironment;

        public HomeController(IApplicationEnvironment appEnvironment)
        {
            _appEnvironment = appEnvironment;
        }

        public ActionResult Index()
        {
            return Content(_appEnvironment.ApplicationBasePath);
        }
    }
}

 

暂无评论