ASP.NET Core 2.2 基礎知識(五) 環境


一.環境變量

系統啟動時,會讀取環境變量 ASPNETCORE_ENVIRONMENT ,並將該變量的值存儲在 IHostingEnvironment.EnvironmentName 字段中.如:

新建一個 WebAPI 項目,修改 Configure 方法:

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            ......
 { app.Run(async context =>
                {
                    context.Response.ContentType = "text/plain;charset=utf-8";//沒有這句話,中文會出現亂碼.
                    await context.Response.WriteAsync($"當前環境 : {env.EnvironmentName}"); }); }
            ......
        }

 

 

ASPNETCORE_ENVIRONMENT 可以設置為任意值,但是 ASP.NET Core 框架只支持 3 個值:

Development 

Staging

Production

如果沒有設置該變量的值,則默認 Production

那么問題來了,在哪里設置呢?

方法一 : launchSettings.json

打開上例創建的 WebAPI 項目的 launchSettings.json 文件:

{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "iisSettings": {
    "windowsAuthentication": false, 
    "anonymousAuthentication": true, 
    "iisExpress": {
      "applicationUrl": "http://localhost:53476",
      "sslPort": 44307
    }
  },
  "profiles": {
    //部署到IIS時,會讀取該節點的設置.
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "environmentVariables": {
        //"ASPNETCORE_ENVIRONMENT": "Development"
        "ASPNETCORE_ENVIRONMENT": "Production" //我們修改為 "Production" 看效果
      }
    },
    //在控制台啟動時,會讀取該節點的設置
    "EnvironmentDemo1": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Staging" //我們修改為 "Staging" 看效果
      }
    }
  }
}

IIS下運行效果:

 

 

控制台運行效果:

 

 二.基於環境的 Startup 類

當 ASP.NET Core 應用啟動時,會在 Program 類中通過 Startup 類啟動應用.

ASP.NET Core 提供了基於不同環境選擇不同的 Startup 類的方法.但是類名有個約定,只能這樣命名:

Startup{EnvironmentName}

EnvironmentName 為當前環境.

示例:

    /// <summary>
    /// 開發環境啟動類
    /// </summary>
    public class StartupDevelopment
    {
        public void ConfigureServices(IServiceCollection services){}

        public void Configure(IApplicationBuilder app, IHostingEnvironment env){}
    }

    /// <summary>
    /// 模擬環境啟動類
    /// </summary>
    public class StartupStaging
    {
        public void ConfigureServices(IServiceCollection services){}

        public void Configure(IApplicationBuilder app, IHostingEnvironment env){}
    }

    /// <summary>
    /// 生產環境啟動類
    /// </summary>
    public class StartupProduction
    {
        public void ConfigureServices(IServiceCollection services){}

        public void Configure(IApplicationBuilder app, IHostingEnvironment env){}
    }

要讓系統根據當前環境選擇上述3個啟動類中的一個,還需要修改調用方法.

默認的調用方法是這樣的:

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();
    }

需要修改成:

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

 

 二.基於環境的 ConfigureServices 方法和 Configure 方法

上代碼一目了然:

        public void ConfigureStaging(IApplicationBuilder app, IHostingEnvironment env)
        {

        }

        public void ConfigureStagingServices(IServiceCollection services)
        {

        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM