Asp.Net Core 中的環境變量
軟件開發環境在大多數軟件開發組織中,我們通常具有以下開發環境。
- 開發環境--Development
- 演示(模擬、臨時)環境--Staging
- 生產環境-- Production
為什么我們需要不同的開發環境,如開發,演示,生產等等環境。
**開發環境:**我們的軟件開發人員通常將此環境用於我們的日常開發工作。我們希望在開發環境中加載非縮小的 JavaScript 和 CSS 文件,以便於調試。類似地,如果存在未處理的異常,我們需要開發人員異常頁面,以便我們可以理解異常的根本原因並在需要時進行修復。
**演示環境:**許多組織或者公司嘗試使其演示環境盡可能與實際生產環境保持一致。此環境的主要原因是識別任何與部署相關的問題。此外,如果您正在開發 B2B(企業對企業)應用程序,您可能正在與其他服務提供商系統連接。許多組織通常設置其臨時環境以與服務提供商進行交互,以進行完整的端到端測試。 我們通常不會在演示環境中進行故障排除和調試,同時為了獲得更好的性能,我們需要加載縮小的 JavaScript 和 CSS 文件。 如果存在未處理的異常,則顯示用戶友好的錯誤頁面而不是開發人員異常頁面。用戶友好的錯誤頁面不包含任何技術細節。它包含如下通用消息 :“出現問題,請使用下面的聯系方式發送電子郵件,聊天或致電我們的應用程序支持”
**生產環境:**我們用於日常業務的實際環境。應配置生產環境以獲得最大的安全性和性能。因此,加載縮小的 JavaScript 和 CSS 文件以提高性能。為了更好的安全性,請顯示用戶友好錯誤頁面而不是開發人員異常頁面。Developer Exception 頁面上的技術細節對最終用戶沒有意義,惡意用戶可以使用它們進入您的應用程序。
配置 ASPNETCORE_ENVIRONMENT 變量
使用此變量為應用程序設置環境。在我們的本地開發機器上,我們通常在launchsettings.json文件中設置此環境變量。如果需要,我們也可以在操作系統中進行設置。在 Windows 操作系統上進行設置
- 打開 Windows 控制面板
- 在“控制面板”窗口中,在右上角的“搜索控制面板”文本框中鍵入“環境”
- 單擊“編輯系統環境變量”鏈接
- 在彈出的“系統屬性”窗口中,單擊“環境變量”按鈕
- 在彈出的“環境變量”窗口中,單擊“系統變量”部分下的“ 新建”按鈕
- 在 彈出的“新建系統變量”窗口中,在 “變量名稱”文本框中輸入值ASPNETCORE_ENVIRONMENT,. 在“變量值”文本框中輸入Development
- 單擊“確定”關閉所有彈出窗口
在staging
或production
環境中,我們通常在操作系統中設置此環境變量。 我們通常將此變量設置為以下值之一,具體取決於托管和運行應用程序的環境:
- Development
- Staging
- Production
訪問ASPNETCORE_ENVIRONMENT
變量值
開箱即用,ASP.NET Core 提供了 IHostingEnvironment 服務,我們可以使用它來訪問 ASPNETCORE_ENVIRONMENT 變量值。 看一下我們一直在使用的示例應用程序,注意 Startup.cs 文件中的 Configure()方法。 IHostingEnvironment 服務已經注入到此方法。 現在修改 Configure()方法中的代碼,如下所示。 注意,我們使用IHostingEnvironment服務的 EnvironmentName 屬性來訪問環境名稱。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hosting Environment: " + env.EnvironmentName);
});
}
C#
如果在兩個位置(即 launchsettings.json 文件和操作系統中)都設置了環境變量,則 launchsettings.json 文件中的值將覆蓋操作系統級別指定的值。
請注意:如果您的操作系統設置的環境沒有生效,請重新啟動 Visual Studio 試試。
如果我們沒有明確設置ASPNETCORE_ENVIRONMENT
變量,則默認為生產。這樣做是為了更好的安全性和性能。
想象一下,在生產服務器上,我們忘記將ASPNETCORE_ENVIRONMENT
變量設置為 Production。如果默認值為Development
,則應用程序可能會顯示Developer Exception Page
,並且惡意用戶可能利用它來入侵您的應用程序。
此外,他加載非縮小的文件,而不是加載壓縮后的 JavaScript 和 CSS 文件。因此,為了獲得更好的性能和安全性,如果我們沒有明確設置ASPNETCORE_ENVIRONMENT
變量,則默認為 Production 值。
IHostingEnvironment 服務的中常用的方法介紹:
使用 IHostingEnvironment 服務的以下方法來標識運行應用程序的環境。
- IsDevelopment()
- IsStaging()
- IsProduction()
如果您擁有 UAT(用戶驗收測試)或 QA(質量保證)環境等自定義環境,該怎么辦?
開發環境(development)、集成環境(integration)、測試環境(testing)、QA 驗證,模擬環境(staging)、生產環境(production)。
那么,ASP.NET Core 也支持這些自定義環境。例如,要檢查環境是否為 UAT,請使用 IsEnvironment()方法,如下所示。 env.IsEnvironment(“UAT”)
//如果環境是Development serve Developer Exception Page
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
//else提供具有應用程序支持的用戶友好錯誤頁面聯系信息
else if (env.IsStaging() || env.IsProduction() || env.IsEnvironment("UAT")){
app.UseExceptionHandler("/Error");
}
C#
Tag Helpers 是 ASP.NET Core 中的新功能。在一個 Razor 視圖里面,也可以在.CSHTML 頁面中進行使用,稱為環境標記助手。
此環境標記幫助程序支持根據ASPNETCORE_ENVIRONMENT
變量的值呈現不同的內容。在我們學習本課程並為我們的應用程序創建模型,視圖和控制器時,我們將詳細討論 Tag Helpers,包括環境標記助手(Environment Tag Helper)。
歡迎添加個人微信號:Like若所思。
歡迎關注我的公眾號,不僅為你推薦最新的博文,還有更多驚喜和資源在等着你!一起學習共同進步!