json配置文件示例
{"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"Account": {"username": "zhangsan","password":"123"},"AllowedHosts": "*"
}
例如读取Account节点数据
方法一
string username = builder.Configuration["Account:username"];
string password = builder.Configuration["Account:password"];
方法二
string username = builder.Configuration.GetSection("Account:username").Value;
string password = builder.Configuration.GetSection("Account:password").Value;
方法三
string username = builder.Configuration.GetValue("Account:username");
string password = builder.Configuration.GetValue("Account:password");
在增加一个数组的节点
{"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("Port:0");var Port1 = builder.Configuration.GetValue("Port:1");var Port2 = builder.Configuration.GetValue("Port:2");var Port3 = builder.Configuration.GetValue("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 Port = new List();
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);
}
返回结果