ASP.Net Core解讀appsettings.json


一、環境

環境: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 來描述應用程序當前運行的環境。這個變量可以被設置為任何你喜歡的值,但是有三個值被約定使用: DevelopmentStaging 和 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中調用:

 

  • 展示效果:

 


免責聲明!

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



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