ASPNET Core api 中獲取應用程序物理路徑wwwroot

如果要得到傳統的ASP.Net應用程序中的相對路徑或虛擬路徑對應的服務器物理路徑,只需要使用使用Server.MapPath()方法來取得Asp.Net根目錄的物理路徑,如下所示:

複製代碼

// Classic ASP.NET

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

複製代碼

但是在ASPNET Core中不存在Server.MapPath()方法,Controller基類也沒有Server屬性。

 

 

在Asp.Net Core中取得物理路徑:

從ASP.NET Core RC2開始,可以通過注入 IHostingEnvironment 服務對象來取得Web根目錄和內容根目錄的物理路徑,如下所示:

 

複製代碼

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 目錄下創建了一個示例 Asp.Net Core 應用程序,當我運行時,控制器將返回以下兩個路徑:

這裏要注意區分Web根目錄 和 內容根目錄的區別:

Web根目錄是指提供靜態內容的根目錄,即asp.net core應用程序根目錄下的wwwroot目錄

內容根目錄是指應用程序的根目錄,即asp.net core應用的應用程序根目錄

 

 

ASP.NET Core RC1

在ASP.NET Core RC2之前 (就是ASP.NET Core RC1或更低版本),通過 IApplicationEnvironment.ApplicationBasePath 來獲取 Asp.Net Core應用程序的根目錄(物理路徑) :

複製代碼

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

複製代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章