天天看點

ASP.NET Core 配置系列四

作者:opendotnet

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 的連結

ASP.NET Core 配置系列四

我們點選連結,這時會彈出對話框,我們可以看到左側選項有三種啟動模式,我們選擇https,我們可以看到目前宿主環境變量ASPNETCORE_ENVIRONMENT設定了Development的值,你可以把這個值修改為下面三個中的任何一個:

1 Development

2 Staging

3 Production

ASP.NET Core 配置系列四

使用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