歡迎光臨
每天分享高質量文章

asp.net core  環境(Development、Staging 、Production)

一.在asp.net core中使用多個環境

ASP.NET Core 配置是基於執行時環境, 使用環境變數。ASP.NET Core 在應用啟動時讀取環境變數ASPNETCORE_ENVIRONMENT,並將該值儲存在 IHostingEnvironment.EnvironmentName 中。ASPNETCORE_ENVIRONMENT 可設定為任意值,但框架支援三個值:Development、Staging 和 Production。 如果釋出專案未設定 ASPNETCORE_ENVIRONMENT,則預設為 Production (本機vs中專案Properties\launchSettings.json中environmentVariables預設設定的是Development,如果禁用environmentVariables,那預設則為Production)。

下麵是Startup. Configure中的預設實現,本機預設配置的是Development環境。

1.1 Development 樣式

         開發環境可以啟用不應該在生產中公開的功能, 例如ASP.NET Core 模板在開發環境中啟用了開發人員異常頁(app.UseDeveloperExceptionPage())。當出現異常時,顯示錯誤頁資訊如下圖所示:

本地計算機開發環境可以在專案的 Properties\launchSettings.json 檔案中設定。 在 launchSettings.json 中設定的環境值替代在系統環境中設定的值。新建的mvc專案預設配置如下:

launchSettings.json 中的 applicationUrl 屬性可指定伺服器 URL 的串列。 在串列中的 URL 之間使用分號。註意:launchSettings.json只用於本機在vs 中開發使用,在開發中可以選擇三種之中任意一種的環境樣式。當專案釋出後,釋出後(iis做反向代理),釋出的檔案中並不會有launchSettings.json檔案。

如果不用vs來啟動應用程式,使用 dotnet run 命令來 啟動應用程式時,使用具有 “commandName”: “Project” 的第一個配置檔案。 commandName 的值指定要啟動的 Web 伺服器。 commandName 可為以下任一項:IIS Express、IIS、Project(啟動 Kestrel 的專案)。

當使用dotnet run 啟動應用時:1會讀取 launchSettings.json中的environmentVariables;2是會顯示打印出host 環境。

1.2  Production  樣式

       Production 環境應配置為最大限度地提高安全性、效能和應用可靠性。 不同於開發環境的一些通用設定包括:

(1) 快取

(2) 客戶端資源被捆綁和縮小,並可能從 CDN (網路分發)提供。

(3) 已禁用診斷錯誤頁。

(4) 已啟用友好錯誤頁。

(5) 已啟用生產記錄和監視。

二. 環境設定

  在專案中為測試設定特定環境通常很有用。 如果未設定環境,預設值為 Production,這會禁用大多數除錯功能。設定環境的方法取決於作業系統。例如將asp.net core razor專案釋出後,部署到IIS上,訪問OtherPages/page1時出現異常。此時預設是Production 環境變數,會顯示了error頁面資訊, 表示已啟用友好錯誤頁。如下圖所示 :

2.1  修改環境變數

上面講到,設定環境的方法取決於作業系統:有Azure 應用服務、Windows、macOS、Linux等。每種作業系統上設定環境變數的方法不同,這裡不在介紹,具體參考檔案。這裡就先只介紹在Windows作業系統上以iis做反向代理的配置環境變數。

在Windows作業系統上配置環境變數方法有很多。當釋出後,檔案中有一個web.config。這裡就介紹下在web.config中設定 ASPNETCORE_ENVIRONMENT 環境變數。使用 web.config 設定 ASPNETCORE_ENVIRONMENT 環境變數後,它的值會替代系統級設定。

dotnet arguments=.\MyNetCoreStudy.dll stdoutLogEnabled=false stdoutLogFile=.\logs\stdout hostingModel=InProcess>

         此時iis上該專案就是Development開發環境了,再次訪問OtherPages/page1時出現異常,此時會捕獲同步和非同步系統。管道中的異常實體,並生成HTML錯誤響應。詳細異常資訊如下圖所示:

三. 釋出到IIS上步驟

下麵簡單講下釋出到IIS上的步驟實現:

(1) 安裝好IIS,網上很多參考資料。

(2)下載dotnet-hosting-2.2.1-win.exe 用於在iis上處理對web伺服器的請求。下載地址介紹:

https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/iis/index?view=aspnetcore-2.2#install-the-net-core-hosting-bundle

在裡面找到“當前 .NET Core 託管捆綁包安裝程式(直接下載)”這裡進去可以下載到當前版本(aspnetcore-2.2),安裝後,在iis模組中能看到AspNetCoreModuleV2。對應釋出專案中web.config的處理。

aspNetCore path=* verb=* modules=AspNetCoreModuleV2 resourceType=Unspecified />

(3) 在vs中右擊專案釋出,選擇”iis Ftp” 點選釋出。 選擇“檔案系統”, 標的位置可以選擇當前電腦位置如: D:\DonetCoreStudy\IIS

 (4) 在iis這邊,新增網站

(5) 在應用程式池中對專案(MyNetCoreStudy)  選擇無託管程式碼。

這樣釋出到iis上就成功了。

四. 基於環境的 Startup 類

  最後在講下Startup 類約定。當 ASP.NET Core 應用啟動時,會啟動Startup類。 應用程式可以為不同的環境,單獨定義 Startup 類。可以定義例如: StartupDevelopment類、StartupProduction類,Startup類。當程式執行時會選擇相應的 Startup 類。 程式會優先考慮名稱字尾與當前環境相匹配的類。如果是Developmen環境則程式進入StartupDevelopment類,如果是Production環境則程式進入StartupProduction類。如果找不到匹配的 Startup{EnvironmentName},就會使用 Startup 類。

基於環境的 Startup 類實現程式碼如下:

贊(0)

分享創造快樂