You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 18:50:58