.NET Core 6.0之讀取配置檔案

大雄45發表於2022-02-14
導讀 在ASP.NET Core 6.0中,預設配置檔案是appsettings.json,該檔案儲存的內容為JSON格式的字串,我們一般都將程式的配置放在這個檔案裡面,提供給程式使用,那麼我們該如何操作呢?

ASP.NET Core預設載入順序是appsettings.json->

appsettings.Environment.json,它會根據當前的執行環境去載入不同的配置檔案,最後

appsettings.Environment.json 值將替代 appsettings.json 中的值,如果沒有多個值,則取預設值。

在開始之前,我們先在appsettings.json中新增一些配置資訊

"Wechat": {
    "AppId": "wx26c607c55f31745e",
    "AppSecret": "e7da82499266ca3fdf85290f68f8fd3a"
  }

.NET Core 6.0之讀取配置檔案.NET Core 6.0之讀取配置檔案

簡單讀取配置

現在我們就嘗試讀取配置檔案中AppId和AppSecret的值,在Program.cs中,我們直接可以用WebApplicationBuilder裡面的Configuration屬性來讀取,取配置內容的方式有很多,比如:

string appId = builder.Configuration.GetSection("Wechat")["AppId"];
string appSecret = builder.Configuration.GetSection("Wechat")["AppSecret"];

.NET Core 6.0之讀取配置檔案.NET Core 6.0之讀取配置檔案

還可以這樣

string appId1 = builder.Configuration["Wechat:AppId"];
string appSecret1 = builder.Configuration["Wechat:AppSecret"];

當然,它還可以更深的層級,如:builder.Configuration["AppConfig:Wechat:AppSecret"]

.NET Core 6.0之讀取配置檔案.NET Core 6.0之讀取配置檔案

如果我們想在非Program.cs裡面讀取配置,則需要注入IConfiguration例項,其他操作方式便和前面的一致,我們還在來實踐一次,這裡我先新建一個Controller

[Route("api/[controller]")]
[ApiController]
public class ConfigurationController : ControllerBase
{
    private readonly IConfiguration Configuration;
    public ConfigurationController(IConfiguration configuration) {
        Configuration = configuration;
    }
    [HttpGet]
    public string ReadConfig()
    {
        return Configuration["Wechat:AppId"];
    }
}

我們直接訪問api/Configuration,便能返回配置檔案中的AppId資訊,

.NET Core 6.0之讀取配置檔案.NET Core 6.0之讀取配置檔案

配置繫結到實體

如果配置檔案比較複雜,我們依然用前面的方式一個個的去取值,那確實有些繁瑣,所以,我們需要更高階的操作,直接把配置內容裝載到實體類中,這我新建一個名為WechatConfiguration的類,裡面加入與配置檔案對應的屬性

public class WechatConfiguration
{
    public const string KEY = "Wechat";
    public string AppId { get; set; } = String.Empty;
    public string AppSecret { get; set; } = String.Empty;
}

這裡,我們需要使用的IConfiguration的GetSection方法來獲取指定節點的內容,然後使用Get將內容序列化為物件,看例子

Configuration.GetSection(WechatConfiguration.KEY).Get();

.NET Core 6.0之讀取配置檔案.NET Core 6.0之讀取配置檔案
.NET Core 6.0之讀取配置檔案.NET Core 6.0之讀取配置檔案

除了使用Get取值,還可使用Bind方法,將值繫結到物件上

WechatConfiguration wechatConfiguration = new WechatConfiguration();
Configuration.GetSection(WechatConfiguration.KEY).Bind(wechatConfiguration);

.NET Core 6.0之讀取配置檔案.NET Core 6.0之讀取配置檔案

這兩種方式都能獲取到配置檔案修改後的內容,除了上面兩種方式獲取配置內容外,還可以使用直接將配置物件注入到容器中,

builder.Services.Configure(builder.Configuration.GetSection(WechatConfiguration.KEY));

然後在需要使用的類中注入IOptions,透過其Value屬性來獲取配置類物件

public class ConfigurationController : ControllerBase
{
    private readonly IConfiguration Configuration;
    private readonly WechatConfiguration wechat;
    public ConfigurationController(IConfiguration configuration, IOptionsoptions)
    {
        Configuration = configuration;
        wechat = options.Value;
    }
}

.NET Core 6.0之讀取配置檔案.NET Core 6.0之讀取配置檔案
如果配置類過多,那麼在Program.cs便會顯得雜亂臃腫,所以,我們可以將其移動到擴充套件方法以註冊服務,這裡新建一個擴充套件類

ConfigServiceCollectionExtensions,將前面的程式碼移動到該類中

public static class ConfigServiceCollectionExtensions
{
    public static IServiceCollection AddConfig(this IServiceCollection services, IConfiguration config)
    {
        services.Configure(config.GetSection(WechatConfiguration.KEY));
        return services;
    }
}

然後在Program.cs中新增引用即可

builder.Services.AddConfig(builder.Configuration);

配置檔案讀取就先了解這麼,明天就要開始上班了,又要忙起來了,後面有時間再繼續學習ASP.NET Core 中的路由。

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2855520/,如需轉載,請註明出處,否則將追究法律責任。

相關文章