(10)ASP.NET Core 中的環境配置(dev, stage, prod)

1.環境變量配置

ASP.NET Core在應用程序啓動時讀取環境變量(Properties\launchSettings.json)ASPNETCORE_ENVIRONMENT,並將該值存儲在IHostingEnvironment.EnvironmentName中。ASPNETCORE_ENVIRONMENT可設置爲任意值,但框架只支持三個值:Development(開發)、Staging (分階段)和 Production(生產)。若是未設置ASPNETCORE_ENVIRONMENT,則默認爲 Production。json

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    if (env.IsProduction() || env.IsStaging() || env.IsEnvironment("Staging_2"))
    {
        app.UseExceptionHandler("/Error");
    }
}

Properties/launchSettings.json裏面的配置以下:windows

 

●當ASPNETCORE_ENVIRONMENT設置爲Development時,調用UseDeveloperExceptionPage。
●當ASPNETCORE_ENVIRONMENT設置爲Staging、Production時,調用UseExceptionHandler。緩存

2.開發環境配置

開發環境能夠啓用不該該在生產中公開的功能。例如,只在開發環境中啓用了開發人員異常頁。本地計算機開發環境能夠在項目的Properties\launchSettings.json文件中設置。在 launchSettings.json中設置的環境值替代在系統環境中設置的值。如下 launchSettings.json 文件中顯示的三個配置文件:安全

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:54339/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_My_Environment": "1",
        "ASPNETCORE_DETAILEDERRORS": "1",
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "EnvironmentsSample": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Production"
      },
      "applicationUrl": "http://localhost:54340;http://localhost:54341"
    },
    "Kestrel Staging": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_My_Environment": "1",
        "ASPNETCORE_DETAILEDERRORS": "1",
        "ASPNETCORE_ENVIRONMENT": "Staging"
      },
      "applicationUrl": "http://localhost:51997/"
    }
  }
}

使用dotnet run啓動應用時,會使用具備"commandName": "IISExpress"的第一個配置文件。commandName的值是指定要啓動的Web服務器。而launchSettings.json中的applicationUrl屬性也可指定服務器URL的列表。 在列表中的URL之間使用分號,如上述環境配置中EnvironmentsSample裏面的applicationUrl屬性值配置。Visual Studio項目屬性「調試」選項卡中也提供了GUI來編輯launchSettings.json文件:服務器

在Web服務器從新啓動以前,對項目配置文件所作的更改可能不會生效。必須從新啓動 Kestrel才能檢測到對環境配置所作的更改。
如今咱們來驗證開發環境中啓用了開發人員異常頁示例,首先調試啓動第一個配置文件(IISExpress):網絡

 

3.生產環境配置

Production環境應配置爲最大限度地提升安全性、性能和應用可靠性。不一樣於開發的一些通用設置包括:
●緩存。
●客戶端資源被捆綁和縮小,並可能從CDN(網絡分發)提供。
●已禁用診斷錯誤頁。
●已啓用友好錯誤頁。
●已啓用生產記錄和監視。例如,Application Insights。
如今咱們來驗證生產環境中啓用了友好錯誤頁示例,首先調試啓動第二個配置文件(EnvironmentsSample):app

4.基於環境配置的Startup類和方法

當ASP.NET Core應用程序啓動時,應用程序能夠爲不一樣的環境單獨定義Startup類(例如,StartupDevelopment),對應Startup類會在運行時進行選擇環境配置。優先考慮名稱後綴與當前環境相匹配的Startup類。若是找不到匹配的Startup{EnvironmentName},就會使用原始的Startup類。若要實現基於環境的Startup類,請爲使用中的每一個環境建立Startup{EnvironmentName} 類:框架

public class StartupDevelopment
{
    public void ConfigureServices(IServiceCollection services)
    {
    }
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
    }
}
public class StartupProduction
{
    public void ConfigureServices(IServiceCollection services)
    {
    }
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
    }
}

使用接受程序集名稱的UseStartup(IWebHostBuilder, String) 進行重載:性能

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }
    public static IWebHostBuilder CreateWebHostBuilder(string[] args)
    {
        var assemblyName = typeof(Startup).GetTypeInfo().Assembly.FullName;
        return WebHost.CreateDefaultBuilder(args)
            .UseStartup(assemblyName);
    }
}

經過調試啓動第二個配置文件(EnvironmentsSample)看看效果:ui

由於調試啓動第二個配置文件(EnvironmentsSample)的生產(Production)環境,因此Startup類會在運行選擇時會針對當前環境配置找到對應Startup類並加載。

 

參考文獻:
在 ASP.NET Core 中使用多個環境

相關文章
相關標籤/搜索