ASPNET Core api 中獲取應用程式物理路徑wwwroot
阿新 • • 發佈:2019-02-20
如果要得到傳統的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); } } }