隐藏

NET Core 6.0之读取配置文件appsettings.json

发布:2022/12/29 16:26:15作者:管理员 来源:本站 浏览次数:582

ASP.NET Core默认加载顺序是appsettings.json->appsettings.Environment.json,它会根据当前的运行环境去加载不同的配置文件,最后appsettings.Environment.json 值将替代 appsettings.json 中的值,如果没有多个值,则取默认值。


在开始之前,我们先在appsettings.json中新增一些配置信息


"Wechat": {

   "AppId": "wx26c607c55f31745e",

   "AppSecret": "e7da82499266ca3fdf85290f68f8fd3a"

 }


一、简单读取配置


1、在Program.cs中尝试读取配置文件中AppId和AppSecret的值,可以用WebApplicationBuilder里面的Configuration属性来读取,取配置内容的方式有很多,比如:


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

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


或者


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

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


或者更深的层级取消


   string appId1 =builder.Configuration["AppConfig:Wechat:Ap"]


string appSecret1 =builder.Configuration["AppConfig:Wechat:AppSecret"]


 


2、在非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信息,


3、配置绑定到实体


如果配置文件比较复杂,用前面的方式一个个的去取值,确实有些繁琐,所以,需要更高端的操作,直接把配置内容装载到实体类中,新建一个名为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<WechatConfiguration>();


除了,使用Get取值,还可使用Bind方法,将值绑定到对象上


WechatConfiguration wechatConfiguration = new WechatConfiguration();

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


这两种方式都能获取到配置文件修改后的内容,除了上面两种方式获取配置内容外,还可以使用直接将配置对象注入到容器中,


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, IOptions options)

   {

       Configuration = configuration;

       wechat = options.Value;

   }

}


如果配置类过多,那么在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);