json配置文件示例
- {
- "Logging": {
- "LogLevel": {
- "Default": "Information",
- "Microsoft.AspNetCore": "Warning"
- }
- },
- "Account": {"username": "zhangsan","password":"123"},
- "AllowedHosts": "*"
- }
例如读取Account节点数据
方法一
- #region 方式1
- string username1 = builder.Configuration["Account:username"];
- string password1 = builder.Configuration["Account:password"];
- #endregion
- #region 方式2
- string username2 = builder.Configuration.GetSection("Account:username").Value;
- string password2 = builder.Configuration.GetSection("Account:password").Value;
- #endregion
- #region 方式3
- string username3 = builder.Configuration.GetValue<string>("Account:username");
- string password3 = builder.Configuration.GetValue<string>("Account:password");
- #endregion
在增加一个数组的节点
- {
- "Logging": {
- "LogLevel": {
- "Default": "Information",
- "Microsoft.AspNetCore": "Warning"
- }
- },
- "Account": {
- "username": "zhangsan",
- "password": "123"
- },
- "Port": [1,2,3,4],
- "AllowedHosts": "*"
- }
用泛型方法builder.Configuration.GetVaue

对于数组我们只能这样读取
- var Port0 = builder.Configuration.GetValue<int>("Port:0");
- var Port1 = builder.Configuration.GetValue<int>("Port:1");
- var Port2 = builder.Configuration.GetValue<int>("Port:2");
- var Port3 = builder.Configuration.GetValue<int>("Port:3");
因为配置文件都是键值的形式存在,而对于数组而言,下标就是它的键,通过下标找到对应的值
对于这样太繁琐,我想返回跟配置一样的数组形式 可以这样
var Port=builder.Configuration.GetSection("Port").GetChildren().Select(x => x.Value).ToArray();
运行结果 ,得到我们想要的

方法二
新建一个类,跟配置文件节点名保持一致
- public class Account {
- public string username { get; set; }
- public string password { get; set; }
- }
找到这个节点绑定到这个类
- Account account = new Account();
- builder.Configuration.Bind("Account", account);
运行结果

同理
对于前面读取数组,也能用绑定方式获取
- List<int> Port = new List<int>();
- builder.Configuration.Bind("Port", Port);
以上都是在Program.cs中读取,如何在控制器中读取呢
在Program.cs中加入
builder.Services.Configure(builder.Configuration.GetSection("Account"));
在控制器中注入
private readonly IOptionsSnapshot optAccountSettings
在接口中
- [HttpGet]
- public IActionResult Account()
- {
-
- var db = _optAccountSettings.Value;
- return Ok(db);
- }

返回结果
