ASP.NET Core中能否设置必填配置,缺失配置段时启动触发报错?
方案1:显式检查配置段是否存在
直接在注册配置前判断配置段是否存在,不存在直接启动抛异常:
// 先获取目标配置段 var fooBarSection = Configuration.GetSection("FooBar"); // 检查配置段是否存在 if (!fooBarSection.Exists()) { throw new InvalidOperationException("必填配置段 FooBar 不存在,请检查appsettings.json等配置源是否正确配置"); } // 再执行配置绑定 services.Configure<FooBarOptions>(fooBarSection);
只要配置段名写错、或者配置文件里没加对应的配置节点,应用启动时就会直接抛出异常,不会到运行时才出问题。
方案2:使用配置验证(推荐)
不仅可以检测配置段是否存在,还可以验证配置内容的合法性,步骤如下:
- 给配置类加数据注解验证规则
using System.ComponentModel.DataAnnotations; public class FooBarOptions { // 标记必填字段 [Required(ErrorMessage = "FooBar配置的ApiKey不能为空")] public string ApiKey { get; set; } [Range(1, 65535, ErrorMessage = "端口号必须在1-65535范围内")] public int Port { get; set; } }
- 注册配置时开启验证和启动校验
services.Configure<FooBarOptions>(Configuration.GetSection("FooBar")) // 启用数据注解验证 .ValidateDataAnnotations() // 关键:应用启动时就执行验证,而非第一次使用配置时才校验 .ValidateOnStart();
如果配置段不存在、或者配置内容不符合规则,启动时会直接抛出明确的错误提示,定位问题更高效。
如果使用的是.NET 6之前没有ValidateOnStart方法的版本,可以自行实现一个IHostedService在应用启动时遍历所有IOptions进行校验,效果一致。
内容的提问来源于stack exchange,提问作者Jonathan Allen
相关产品推荐
相关产品推荐

