解釋 ASP.NET Core 如何支援開發和生產環境
在生產環境中為實際使用者執行應用程式與在本地機器上開發時執行應用程式非常不同。在生產環境中,您的應用程式託管在伺服器上,該伺服器的配置和規格與您的計算機大相徑庭。您的應用程式與之互動的各種服務(例如資料庫或外部 API)在生產環境中也會發生變化。
透過讓應用程式知道它正在執行的環境,您可以改變應用程式的行為。ASP.NET Core 使管理各種環境變得輕而易舉。您可以為不同的環境配置不同的配置設定,並進行調整而無需重新編譯應用程式。這使您可以輕鬆更改環境。
管理應用程式環境包括三個部分:識別環境、根據環境載入不同的配置設定以及更改環境。
為了確定執行時環境,當呼叫 ConfigureWebHostDefaults 方法時,ASP.NET Core 使用名為 DOTNET_ENVIRONMENT 或 ASPNETCORE_ENVIRONMENT 的環境變數。第二個環境變數會覆蓋第一個環境變數。
如果應用程式在啟動時找不到 ASPNETCORE_ENVIRONMENT 變數,則預設為生產環境。這意味著,除非您在部署機器上明確將變數設定為開發環境,否則所有 ASP.NET Core 應用程式都將以生產模式啟動。
您還可以使用 launchSettings.json 檔案來設定託管環境。此檔案位於 Properties 資料夾中,並定義了執行應用程式的配置檔案。這是一個典型的 launchSettings.json 檔案示例。
{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "https://:17456", "sslPort": 44394 } }, "profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "TutorialsPoint": { "commandName": "Project", "dotnetRunMessages": "true", "launchBrowser": true, "applicationUrl": "https://:5001;https://:5000", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } }
由於 ASP.NET Core 應用程式作為控制檯應用程式啟動,因此當前託管環境會在啟動時記錄到控制檯中。
➜ TutorialsPoint dotnet run Building... info: Microsoft.Hosting.Lifetime[0] Now listening on: https://:5001 info: Microsoft.Hosting.Lifetime[0] Now listening on: https://:5000 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Development info: Microsoft.Hosting.Lifetime[0] Content root path: /TutorialsPoint
傳遞給 Startup 類中 Configure() 方法的 IWebHostEnvironment 引數提供名為 IsDevelopment()、IsStaging() 等的輔助方法,以便輕鬆識別環境。它還有一個名為 IsEnvironment(envName) 的方法,該方法接受一個字串並返回環境名稱是否與該字串匹配。您可以使用它來識別任何自定義環境。
雖然您可以使用任何值來指定環境,但 ASP.NET Core 原生提供三個值:
- 開發
- 過渡
- 生產
public void Configure(IApplicationBuilder app, IWebHostEnvironment env){ if (env.IsDevelopment()){ app.UseDeveloperExceptionPage(); } if (env.IsProduction() || env.IsStaging() || env.IsEnvironment("Staging_2")){ app.UseExceptionHandler("/Error"); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints =>{ endpoints.MapRazorPages(); }); }
ASP.NET Core 在啟動過程的早期確定環境,甚至在設定配置之前。這允許您根據環境動態更改配置提供程式。