8 ASP.NET Core 宿主環境ASP.NET Core 宿主環境變量用來判斷應用程式運作的環境,有三種類型的宿主環境變量:
1 Development
2 Staging
3 Production
8.1 ASP.NET Core擷取宿主環境
我們能在Program類中擷取宿主環境
if (!app.Environment.IsDevelopment()) { // do something }
IWebHostEnvironment接口有3個方法判斷宿主環境
1 IsDevelopment – 如果是開發環境傳回true
2 IsStaging – 如果是Staging環境傳回ture3 IsProduction – 如果是生産環境傳回true将下面代碼添加到Program.cs類,下面展示如何使用這3個方法執行不同環境的代碼塊
if (!app.Environment.IsDevelopment()) { // do something } if (app.Environment.IsStaging()) { // do something } if (!app.Environment.IsProduction()) { // do something }
8.2 ASP.NET Core 設定宿主環境我們可以通過ASP.NET Core應用程式的Properties設定宿主環境變量,在解決方案中,右擊你應用程式名稱選擇屬性在屬性頁面選擇Debug選項,我們可以看到一個Open debug launch profiles UI 的連結
我們點選連結,這時會彈出對話框,我們可以看到左側選項有三種啟動模式,我們選擇https,我們可以看到目前宿主環境變量ASPNETCORE_ENVIRONMENT設定了Development的值,你可以把這個值修改為下面三個中的任何一個:
1 Development
2 Staging
3 Production
使用Ctrl+S來儲存該屬性,Visual Studio存儲該環境變量到launchSettings.json檔案,這個檔案位于應用程式的Properties目錄下lunchSettings.json檔案
{ "profiles": { "http": { "commandName": "Project", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, "dotnetRunMessages": true, "applicationUrl": "http://localhost:5041" }, "https": { "commandName": "Project", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, "dotnetRunMessages": true, "applicationUrl": "https://localhost:7034;http://localhost:5041" }, "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } }, "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:1894", "sslPort": 44305 } } }
你也可以直接編輯json檔案,不需要通過Properties頁面來編輯環境變量,我們将https運作模式下ASPNETCORE_ENVIRONMENT修改為Production
"ASPNETCORE_ENVIRONMENT": "Production"
我們将前面建立的中間件讓它們在生産環境中執行
if (app.Environment.IsProduction()) { app.UseMiddleware<ResponseEditingMiddleware>(); app.UseMiddleware<RequestEditingMiddleware>(); app.UseMiddleware<ShortCircuitMiddleware>(); app.UseMiddleware<ContentMiddleware>(); }
9 在控制器中擷取宿主環境&WebRootPath
我們可以擷取宿主環境的變量,通過将IWebHostEnvironment注入到控制器,接下來,我們能夠使用env.IsDevelopment(), env.IsStaging()和env.IsProduction()方法判斷目前宿主的環境變量
如下代碼所示:
namespace AspNetCore.Configuration.Controllers { public class SomeController : Controller { private IWebHostEnvironment _env; public SomeController(IWebHostEnvironment hostingEnvironment) { _env = hostingEnvironment; } public IActionResult Index() { if (_env.IsDevelopment()) { // do something } if (_env.IsStaging()) { // do something } if (_env.IsProduction()) { // do something } return View(); } } }
IWebHostEnvironment 接口的WebRootPath屬性指向應用程式靜态檔案目錄wwwroot, 你可以在控制器中使用這個屬性來擷取檔案的絕對路徑有時,我們想要使用wwwwroot目錄下的圖檔綁定圖檔标簽的src屬性,我們可以使用WebRootPath來擷取應用程式wwwroot的目錄,是以,首先注入在構造函數中注入IWebHostEnvironment 參數,這個由ASP.NET Core的DI來完成,現在你可以使用WebRootPath屬性來擷取絕對路徑
<img src="@ViewBag.ImagePath" alt="WebRootPath example" />
我們現在View的img标簽上顯示圖檔,使用ViewBag綁定scr屬性
10 使用UseStaticFiles中間件提供靜态檔案服務
為了能用戶端通路wwwroot目錄下的靜态檔案,我們必須在Program類中添加app.UseStaticFiles(),把該中間件放到app.UseRouting()之前
app.UseStaticFiles(); app.UseRouting();
總結
這節我們主要介紹了ASP.NET Core宿主環境的配置以及如何擷取宿主環境變量的值源代碼位址https://github.com/bingbing-gui/Asp.Net-Core-Skill/tree/master/Fundamentals/AspNetCore.Configuration/AspNetCore.Configuration參考文獻[1]https://www.yogihosting.com/aspnet-core-configurations/#content-generating-middleware