一、環境
環境:ASP.NET Core3.1
ASP.NET Core是一個全新的Web開發平台,微軟在它上面構建了MVC、SingalR、GRPC、Orleans這樣廣泛使用的Web框架,我們先以MVC框架為例介紹利用ASP.NET Core構建項目的常見名詞。這篇文章介紹appsettings.json
ASP.NET Core MVC項目文件夾解讀
在開發項目的過程當中,生產環境與調試環境的配置是不一樣的,比如連接字符串。 ASP .NET Core 支持利用環境變量來動態配置 JSON 文件。ASP.NET Core 引用了一個特定的環境變量 ASPNETCORE_ENVIRONMENT
來描述應用程序當前運行的環境。這個變量可以被設置為任何你喜歡的值,但是有三個值被約定使用: Development
,Staging
和 Production。
二、Appsettings.json
- 首先在 ASP .NET Core 項目當中添加一個appsettings.json(默認都有該文件)文件,內容如下圖:
- 再繼續添加 appsettings.Development.json和appsettings.Production.json兩個配置文件。解決方案管理器如下圖:
- 我們可以在appsettings.Development.json和appsettings.Production.json分別設置相應的配置信息,比如數據庫連接
三、自定義配置json
有時候一個復雜的項目配置信息比較多,Appsettings.json會很復雜,所以一般都會把一些單獨分離出來,比如將數據庫連接配置分離出來。
- 首先在 ASP .NET Core 項目當中添加一個connectionStrings.json文件,內容如下:
- 再繼續添加 connectionStrings.Development.json和connectionStrings.Production.json兩個配置文件。如下圖:
之前有同事問,我們添加了一個自定義的json文件,應用是如何也曉得的呢?IHostBuilder提供了一個擴展方法ConfigureAppConfiguration,它的作用就是將我們自定義的json文件注入到項目中,能夠被應用所識別。ConfigureAppConfiguration方法可累加,也就是說你可以利用ConfigureAppConfiguration方法加入多個json文件。如:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseKestrel(); webBuilder.UseStartup<Startup>(); }) //指定自定義的配置json .ConfigureAppConfiguration((h, c) => { c.AddJsonFile($"appsettings_ratelimit.json", true, true); });
使用的時候和使用appsettings.json一樣,不用指定json的文件名稱。為什么呢?看下AddJsonFile方法的源碼如下:
// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Collections.Generic; namespace Microsoft.Extensions.Configuration { /// <summary> /// Used to build key/value based configuration settings for use in an application. /// </summary> public class ConfigurationBuilder : IConfigurationBuilder { /// <summary> /// Returns the sources used to obtain configuration values. /// </summary> public IList<IConfigurationSource> Sources { get; } = new List<IConfigurationSource>(); /// <summary> /// Gets a key/value collection that can be used to share data between the <see cref="IConfigurationBuilder"/> /// and the registered <see cref="IConfigurationProvider"/>s. /// </summary> public IDictionary<string, object> Properties { get; } = new Dictionary<string, object>(); /// <summary> /// Adds a new configuration source. /// </summary> /// <param name="source">The configuration source to add.</param> /// <returns>The same <see cref="IConfigurationBuilder"/>.</returns> public IConfigurationBuilder Add(IConfigurationSource source) { if (source == null) { throw new ArgumentNullException(nameof(source)); } Sources.Add(source); return this; } /// <summary> /// Builds an <see cref="IConfiguration"/> with keys and values from the set of providers registered in /// <see cref="Sources"/>. /// </summary> /// <returns>An <see cref="IConfigurationRoot"/> with keys and values from the registered providers.</returns> public IConfigurationRoot Build() { var providers = new List<IConfigurationProvider>(); foreach (var source in Sources) { var provider = source.Build(this); providers.Add(provider); } return new ConfigurationRoot(providers); } } }
四、設置環境
1、方案一
ASP.NET Core控制環境切換最核心的東西是“ASPNETCORE_ENVIRONMENT”環境變量,它直接控制當前應用程序運行的環境類型。您可以通過在項目上右鍵菜單選擇“屬性”選項,然后切換到“調試”標簽來修改此環境變量。如下圖:
此環境變量框架默認提供了三個值,當然也可以定義其它的值:
- Development(開發)
- Staging(預演)
- Production(生產)
2、方案二
也可以通過ASP.Net Core包含的launchSettings.json的文件設置環境,可以在項目中“Properties”文件夾中找到該文件。
五、讀取appsettings.json
有2種方法,一種叫丑陋的方法 —— IConfiguration ,一種叫優雅的方法 —— IOptions 。
1、先看丑陋的方法
比如在項目中需要讀取 appsettings.Development.json中的數據庫連接字符串,上邊已經介紹了如何根據環境切換配置,如果想讀取appsettings.Production.json的配置,就按照上邊的兩種方式切換即可。
- 首先在 Startup 的 ConfigureServices() 方法中進行注入:
- 然后在HomeController中調用:
- 展示效果:
2、優雅的方法
比如在項目中需要讀取 appsettings.Development.json中的數據庫連接字符串,上邊已經介紹了如何根據環境切換配置,如果想讀取appsettings.Production.json的配置,就按照上邊的兩種方式切換即可。
- 首先我們在appsettings.Development.json 都添加一個 ConnectionStrings節點。
- 然后定義一個存放連接字符串的配置類 ConnectionStrings(類的名稱要和節點名稱保持一致):
- 在 Startup 的 ConfigureServices() 中注入進去:
- 然后在HomeController中調用,給 HomeController的構造函數參數中添加 IOptions<ConnectionStrings> 接口,通過 IOptions<ConnectionStrings> 讀取配置:
- 效果如下:
六、讀取自定義配置Json
1、第一種方法:IConfiguration方式
- 在根目錄建一個PersonConfig.json配置文件
- 首先在Program中, 調用 ConfigureAppConfiguration 以指定應用的配置提供程序:
- 然后在HomeController中調用:
- 效果展示:
2、第二種方式 IOPtions
- 在根目錄建一個PersonConfig.json配置文件
- 首先在Program中, 調用 ConfigureAppConfiguration 以指定應用的配置提供程序:
- 新建實體:(類的名稱要和節點名稱一致)
- 在startup的 ConfigureServices中注入:
- 然后在HomeController中調用:
- 展示效果: