发布于2026-07-23 阅读(0)
扫一扫,手机访问
每个ASP.NET Core项目自带的appsettings.json,算是默认的配置中心。创建项目时,它就会自动生成,我们可以把各种配置信息丢进去。最方便的一点是,改了配置不需要重启应用,就能热生效。
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"msg": "hello world"
}
先看一个最基础的用法,通过路由终结点来演示如何读取配置。通过IOC容器注入IConfiguration对象,就能读取不同层级的内容。单层节点直接拿键名,多层级的用冒号分隔路径。
app.MapGet("config", (IConfiguration configuration) =>{
return configuration["msg"] + "_" +
configuration["Logging:LogLevel:Default"];
});
这种方式很直白,但取值时要注意键名拼写,尤其嵌套层级深的时候,路径容易写错。不过对于简单场景,它够用了。
另一种方式是用GetValue
app.MapGet("config", (IConfiguration configuration) =>{
return configuration.GetValue("msg");
});
注意,GetValue是强类型方法,但有个限制——它只能读基本类型,比如字符串、数字之类。如果试图用它读取一个对象或复杂类型,就会报异常,这是它的短板。
面对对象或复杂配置,GetSection就派上用场了。它返回一个配置节,然后通过.Value拿到原始字符串。
app.MapGet("config", (IConfiguration configuration) =>{
return configuration.GetSection("msg").Value;
});
读取对象时,可以配合Get
app.MapGet("config", (IConfiguration configuration) =>{
return configuration.GetSection("Person").Get();
});
如果说前面几种方式是在代码里直接拿配置,那Options模式则是更正规的“依赖注入”方法。先定义一个实体类:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
然后在appsettings.json里配好对应字段:
"Person": {
"Name": "张三",
"Age": 18
}
接下来在Service中注册配置,把配置节绑定到类型上:
builder.Services.Configure(builder.Configuration.GetSection("Person"));
最后在需要使用的地方,注入IOptions
app.MapGet("config", (IOptions options) =>{
return $"{options.Value.Name},{options.Value.Age}";
});
这种方式的好处是类型安全,而且配置变更时,IOptionsSnapshot和IOptionsMonitor还能支持热更新,比直接拿IConfiguration更灵活。当然,如果只是临时用一下,GetSection也完全够用。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8