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<string>("Account:username");
string password = builder.Configuration.GetValue<string>("Account:password");
在增加一个数组的节点
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"Account": {
"username": "zhangsan",
"password": "123"
},
"Port": [1,2,3,4],
"AllowedHosts": "*"
}
用泛型方法builder.Configuration.GetVaue<T>("key")读取配置的,结果返回null
对于数组我们只能这样读取
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<Account>(builder.Configuration.GetSection("Account"));
在控制器中注入
private readonly IOptionsSnapshot<Account> optAccountSettings
在接口中
[HttpGet]
public IActionResult Account()
{
var db = _optAccountSettings.Value;
return Ok(db);
}
返回结果