跟着官网学ASP.NET Core 6.0之读取配置文件
原文链接:https://baijiahao.baidu.com/s?id=1723999429833340445&wfr=spider&for=pc
用WebApplicationBuilder里面的Configuration属性来读取,如:builder.Configuration["AppConfig:Wechat:AppSecret"]
在非Program.cs里面读取配置,则需要注入IConfiguration实例
直接把配置内容装载到实体类中
如果配置类过多,那么在Program.cs便会显得杂乱臃肿,所以,我们可以将其移动到扩展方法以注册服务,这里新建一个扩展类ConfigServiceCollectionExtensions,将前面的代码移动到该类中,然后在Program.cs中添加引用即可
在ASP.NET Core 6.0
中,默认配置文件是appsettings.json
,该文件存储的内容为JSON格式的字符串,我们一般都将程序的配置放在这个文件里面,提供给程序使用,那么我们该如何操作呢?
ASP.NET Core默认加载顺序是appsettings.json
->appsettings.Environment.json
,它会根据当前的运行环境去加载不同的配置文件,最后appsettings.Environment.json 值将替代 appsettings.json 中的值,如果没有多个值,则取默认值。
在开始之前,我们先在appsettings.json
中新增一些配置信息
![](https://pics4.baidu.com/feed/dcc451da81cb39dbe00548fe427fd12da91830c7.jpeg@f_auto?token=762796bb77ede757498466b59f037177)
![](https://pics2.baidu.com/feed/cefc1e178a82b9010e23a392e1e4717e3812ef7c.png@f_auto?token=1c311ecb841584cba40ad71e4005c513)
简单读取配置
现在我们就尝试读取配置文件中AppId
和AppSecret
的值,在Program.cs
中,我们直接可以用WebApplicationBuilder
里面的Configuration
属性来读取,取配置内容的方式有很多,比如:
![](https://pics4.baidu.com/feed/6609c93d70cf3bc74d067b01426962a8cc112a48.jpeg@f_auto?token=e8a2c6ef001bc14854adfbc84920b54e)
![](https://pics3.baidu.com/feed/bf096b63f6246b601b0842ef7f91c245500fa29e.png@f_auto?token=148a72ecac346c29d3fb57a3c6bffab3)
还可以这样
![](https://pics0.baidu.com/feed/6159252dd42a2834177cc58bc9dc11e317cebfcf.jpeg@f_auto?token=b2e44fddd00384aed5dcc293619ac80e)
当然,它还可以更深的层级,如:builder.Configuration["AppConfig:Wechat:AppSecret"]
![](https://pics0.baidu.com/feed/3bf33a87e950352a924eb1d7c12a23fbb3118bb1.jpeg@f_auto?token=a9ce2135987f1732da1f90be90ccb6c7)
如果我们想在非Program.cs
里面读取配置,则需要注入IConfiguration
实例,其他操作方式便和前面的一致,我们还在来实践一次,这里我先新建一个Controller
![](https://pics6.baidu.com/feed/4e4a20a4462309f78b843769e867d4fad6cad651.jpeg@f_auto?token=e05cbbd7db69489f65f439a091fae8b7)
我们直接访问api/Configuration
,便能返回配置文件中的AppId
信息,
配置绑定到实体
如果配置文件比较复杂,我们依然用前面的方式一个个的去取值,那确实有些繁琐,所以,我们需要更高端的操作,直接把配置内容装载到实体类中,这我新建一个名为WechatConfiguration
的类,里面加入与配置文件对应的属性
![](https://pics4.baidu.com/feed/574e9258d109b3dee42a15b25ed6b488820a4cc2.jpeg@f_auto?token=55ea95d20e8f7655e9f29e9e2a2dd48b)
这里,我们需要使用的IConfiguration
的GetSection
方法来获取指定节点的内容,然后使用Get<T>
将内容序列化为对象,看例子
![](https://pics6.baidu.com/feed/2f738bd4b31c870184eae91e8f1646260608ff59.jpeg@f_auto?token=d0ea6efb9f9e2d682e9a26a4d1aa9f7d)
除了使用Get<T>
取值,还可使用Bind
方法,将值绑定到对象上
![](https://pics6.baidu.com/feed/8b13632762d0f703b7393caf9b9389342797c5a9.jpeg@f_auto?token=79f9b938215f8855365bd4cefefdeb33)
![](https://pics6.baidu.com/feed/09fa513d269759ee7c8eddc120929b1f6c22df55.png@f_auto?token=98bd9ef8d92c0e97a863e0b79cf8cf19)
这两种方式都能获取到配置文件修改后的内容,除了上面两种方式获取配置内容外,还可以使用直接将配置对象注入到容器中,
![](https://pics0.baidu.com/feed/f636afc379310a552c6701482e2c9ba0832610ba.png@f_auto?token=577487c345e9a24feb27aadc4a25a639)
然后在需要使用的类中注入IOptions<T>
,通过其Value
属性来获取配置类对象
![](https://pics6.baidu.com/feed/10dfa9ec8a1363279ffc33dc03e678e509fac744.png@f_auto?token=8764e9181d67c6419d918f3aabaabe20)
![](https://pics1.baidu.com/feed/203fb80e7bec54e76d7994b62b5143594ec26a70.png@f_auto?token=0352c9bcf971abeea036842e5e5d3293)
如果配置类过多,那么在Program.cs
便会显得杂乱臃肿,所以,我们可以将其移动到扩展方法以注册服务,这里新建一个扩展类ConfigServiceCollectionExtensions
,将前面的代码移动到该类中
![](https://pics5.baidu.com/feed/dcc451da81cb39db7839f0f3427fd12daa183009.png@f_auto?token=ef5f14747264d930dc292822fef73d0a)
然后在Program.cs
中添加引用即可
![](https://pics1.baidu.com/feed/279759ee3d6d55fbca4b1331f84b974321a4dd8f.jpeg@f_auto?token=ffc93a39575170be64a2e628f3f7441f)
配置文件读取就先了解这么,明天就要开始上班了,又要忙起来了,后面有时间再继续学习ASP.NET Core 中的路由。