当前位置: 首页 > 科技观察

跟随官网学习ASP.NETCore6.0阅读配置文件

时间:2023-03-21 17:49:29 科技观察

在ASP.NETCore6.0中,默认的配置文件是appsettings.json,这个文件存储的内容是一个JSON格式的字符串。我们一般将程序的配置放在这个文件中,提供给程序,那么我们如何操作呢?ASP.NETCore默认的加载顺序是appsettings.json->appsettings.Environment.json,会根据当前运行环境文件加载不同的配置,最后的appsettings.Environment.json值会替换appsettings.json中的值,如果没有多个值,将采用默认值。在开始之前,我们先在appsettings.json中添加一些配置信息"Wechat":{"AppId":"wx26c607c55f31745e","AppSecret":"e7da82499266ca3fdf85290f68f8fd3a"}简单读取配置下面我们尝试读取配置文件中的值AppId和AppSecret,在Program.cs中,我们可以直接使用WebApplicationBuilder中的Configuration属性来读取,获取配置内容的方式有很多种,例如:stringappId=builder.Configuration.GetSection("Wechat")["AppId"];stringappSecret=builder.Configuration.GetSection("Wechat")["AppSecret"];你也可以stringappId1=builder.Configuration["Wechat:AppId"];stringappSecret1=builder.Configuration["Wechat:AppSecret"];当然也可以更深入,比如:builder.Configuration["AppConfig:Wechat:AppSecret"]如果我们要读取非Program.cs中的配置,需要注入IConfiguration实例,其他操作方法方便和上一个一致,我们还是练一次。在这里我将创建一个新的Controller[Route("api/[controller]")][ApiController]publicclassConfigurationController:ControllerBase{privatereadonlyIConfigurationConfiguration;publicConfigurationController(IConfigurationconfiguration){Configuration=configuration;}[HttpGet]公共字符串ReadConfig(){返回配置["Wechat:AppId"];}}当我们直接访问api/Configuration时,可以返回配置文件中的AppId信息,配置与实体绑定。如果配置文件比较复杂,我们还是用之前的方法,一个一个取值确实很麻烦,所以需要更高端的操作,直接把配置内容加载到实体类中,所以我创建了一个新建类WechatConfiguration,并添加配置文件对应的属性publicclassWechatConfiguration{publicconststringKEY="Wechat";公共字符串AppId{得到;放;}=String.Empty;公共字符串AppSecret{得到;放;}=String.Empty;}这里我们需要使用IConfiguration方法的GetSection获取指定节点的内容,然后使用Get将内容序列化为一个对象,参见示例Configuration.GetSection(WechatConfiguration.KEY)。获取<微信配置>();除了使用Get值,还可以使用Bind方法将值Bind转换为对象WechatConfigurationwechatConfiguration=newWechatConfiguration();Configuration.GetSection(WechatConfiguration.KEY).Bind(wechatConfiguration);这两种方法都可以获取到配置文件的修改内容,除了上面两种获取配置内容的方法外,还可以直接将配置对象注入到容器中,builder.Services.Configure(builder.Configuration.GetSection(WechatConfiguration.KEY));然后在需要使用的类中注入IOptions,通过其Value属性获取配置类对象publicclassConfigurationController:ControllerBase{privatereadonlyIConfiguration配置;privatereadonlyWechat配置微信;publicConfigurationController(IConfigurationconfiguration,IOptionsoptions){Configuration=configuration;wechat=options.Value;}}如果配置类太多,那么在Program.cs中会显得杂乱臃肿,所以我们可以将其移到扩展方法中注册服务。这里我们新建一个扩展类ConfigServiceCollectionExtensions,将之前的代码移到这个类中。publicstaticclassConfigServiceCollectionExtensions{publicstaticIServiceCollectionAddConfig(thisIServiceCollectionservices,IConfigurationconfig){services.Configure(config.GetSection(WechatConfiguration.KEY));退货服务;}}然后在Program.cs中添加引用builder.Services.AddConfig(builder.Configuration);配置文件读取先了解一下这个。明天就要上班了,又要忙了。以后有空我会继续学习ASP.NETCore中的路由。