在針對專案內部檔案做一些讀取操作的時候
難免都會需要參照到實體的伺服器路徑
假設今天要在Controller讀取一個內部的檔案
在MVC5的世界是這樣寫的
public ActionResult ReadInternalFile()
{
var filePath = HostingEnvironment.MapPath("~/File/players.json");
return View();
}
然後我就依樣畫了葫蘆
恩...結果當然什麼都沒有
不然我就不用紀錄了
查了一下.Net Core的使用方法
要取得這個物件還需要透過DI才拿的到
看來微軟也開始玩朕不給的你不能要這套了
既然是DI
不免俗的一定是抽成介面了 - IHostingEnvironment
必須在Controller的建構式中宣告才拿的到
public class PlayerController : Controller
{
private readonly IHostingEnvironment hostingEnvironment;
public PlayerController(IHostingEnvironment _hostingEnvironment)
{
hostingEnvironment = _hostingEnvironment;
}
}
接著我們看看裡面的東西
不過由於新的專案架構有改變
針對Path的部分有兩個很像的東西
- WebRootPath:顧名思義就是直接回給你wwwroot的實體路徑啦
- ContentRootPath :回傳專案外層的實體路徑
好的,這篇就介紹到這邊囉!
參考資料:
Getting the Web Root Path and the Content Root Path in ASP.NET Core