.NET Core 6中IConfiguration读取环境配置出现重复条目问题
.NET 6环境配置数组不覆盖反而合并的解决办法
问题本质
.NET的配置系统默认对数组采用追加合并的逻辑——环境配置文件(比如appsettings.staging.json)里的数组条目会直接加到基础配置(appsettings.json)的数组后面,而不是替换掉整个数组。这就是你拿到3+1=4条数据的原因。
可行解决方案
1. 用Clear标记清空基础数组
在你的appsettings.staging.json里,给KeyName数组加个前置的清空标记,这样加载环境配置时会先删掉基础配置里的KeyName条目,再加载当前环境的内容:
{ "KeyName:Clear": true, "KeyName": [ // 这里放你要保留的那1条数据 ] }
2. 简化配置读取代码
你当前的写法Configuration.GetSection("KeyName").Bind(deliveryServicesList).Get<List<T>>()多了一步Bind操作,其实直接用Configuration.GetSection("KeyName").Get<List<T>>()就够了——当然前提是配合上面的Clear标记,不然还是会合并。
3. 进阶:自定义配置加载逻辑(不推荐,太繁琐)
如果非要从配置加载层面改,可以在Program.cs里调整配置源,但这种方式不如Clear标记直接:
var builder = WebApplication.CreateBuilder(args); // 先加载基础配置 builder.Configuration.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); // 加载环境配置,虽然这里设置了加载顺序,但数组默认还是合并,所以还是得靠Clear builder.Configuration.AddJsonFile($"appsettings.{builder.Environment.EnvironmentName}.json", optional: true, reloadOnChange: true);
验证步骤
启动应用时指定Staging环境:
dotnet run --environment Staging
或者在launchSettings.json里把ASPNETCORE_ENVIRONMENT设为Staging,再读取配置就能拿到仅有的1条数据了。
内容的提问来源于stack exchange,提问作者Zahid Mustafa
相关产品推荐
相关产品推荐

