ASP.NET如何在Program.cs中从appsettings获取完整配置对象?
解决在Program.cs中完整获取配置对象的问题
问题原因
你当前的错误在于:
- 使用
builder.Configuration.Get<Models.AppSettings>()时,默认从配置根节点开始绑定,但你的配置嵌套在Settings节点下,根节点没有匹配AppSettings模型的属性,导致绑定失败。 - 使用
GetValue<Models.AppSettings>("Settings")是错误用法,GetValue仅适用于获取单个简单类型的值(如字符串、布尔值),无法绑定复杂对象。
正确解决方案
方案1:直接绑定到指定配置节点
通过GetSection("Settings")定位到目标节点后,再调用Get<T>()完成对象绑定:
var builder = WebApplication.CreateBuilder(args); // 定位到Settings节点并绑定到AppSettings对象 var appSettings = builder.Configuration.GetSection("Settings").Get<Models.AppSettings>(); // 此时appSettings会正确包含UseMemory和Cors的配置值
方案2:通过服务容器获取已注册的配置
如果你已经通过builder.Services.Configure<Models.AppSettings>()将配置注册到依赖注入容器,可在构建应用后从容器中获取:
var builder = WebApplication.CreateBuilder(args); var appSettingsSection = builder.Configuration.GetRequiredSection("Settings"); builder.Services.Configure<Models.AppSettings>(appSettingsSection); // 构建WebApplication实例,完成服务容器初始化 var app = builder.Build(); // 从服务容器中获取配置实例 var settings = app.Services.GetRequiredService<IOptions<Models.AppSettings>>().Value;
注意事项
你的CorsSettings类使用了required关键字,需确保appsettings.json中Cors节点下的Origins、Headers、Methods字段都有有效值,否则绑定过程会抛出异常。
内容的提问来源于stack exchange,提问作者nick zoum
相关产品推荐
相关产品推荐

