1. 程式人生 > >再見了Server物件,擁抱IHostingEnvironment服務物件(.net core)

再見了Server物件,擁抱IHostingEnvironment服務物件(.net core)

一、絕對路徑

1、獲取應用程式運行當前目錄Directory.GetCurrentDirectory()。

System.IO名稱空間中存在Directory類,提供了獲取應用程式運行當前目錄的靜態方法GetCurrentDirectory,

但根據.net core的設計,此方法不是真正的獲取應用程式的當前方法,而是執行dotnet命令所在目錄,

var path =  Directory.GetCurrentDirectory()

執行結果:

E:\project\24-dingding-saas\Code\DBen.Ding.SaaS.WebMobile

要獲取應用程式運行當前目錄,只能通過變通的方案解決。

如:1、在應用程式的目錄執行dotnet命令,

  2、或者通過其他方案。

如下程式碼是一種可以獲取應用程式的當前目錄:

 dynamic type = (new Program()).GetType();
 string currentDirectory = Path.GetDirectoryName(type.Assembly.Location);
 Console.WriteLine(currentDirectory);

執行結果:

E:\project\24-dingding-saas\Code\DBen.Ding.SaaS.WebMobile\bin\Debug\netcoreapp2.0\DBen.Ding.SaaS.WebMobile.dll
回到頂部

二、相對路徑

從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/DBen.Ding.SaaS.WebMobile/wwwroot
/Code/DBen.Ding.SaaS.WebMobile