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

ASP.NET 6中GetRequiredSection集成测试执行顺序异常的解决方法

问题解决方案

核心原因

你当前代码的问题在于配置读取时机错误:先执行了builder.Build()完成应用构建,之后才去读取builder.Configuration。而集成测试中通过ConfigureAppConfiguration添加的内存配置,是在宿主构建过程中生效的,Build完成后配置已经固化,此时读取的还是初始配置,自然找不到MySettings节触发异常。

可行解决方案(无需替换GetRequiredSection)

方案1:将配置读取移到builder.Build()之前

把读取配置的代码提前到构建应用实例之前,确保集成测试的配置修改能被加载:

var builder = WebApplication.CreateBuilder(args);

// 提前读取配置,确保集成测试的修改生效
var mySettingSection = builder.Configuration.GetRequiredSection("MySettings");
var mySettingValue = mySettingSection["MyKey"];

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
}
app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.MapGet("/", (Func<string>)(() => $"Hello, your setting value is: {mySettingValue}"));

app.Run();

方案2:延迟配置读取到请求处理阶段

如果不想提前读取配置,可以在每次请求处理时动态读取配置,这样能确保获取到最新的配置(包括集成测试注入的内容):

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
}
app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

// 在请求触发时才读取配置
app.MapGet("/", () => 
{
    var mySettingSection = app.Configuration.GetRequiredSection("MySettings");
    var mySettingValue = mySettingSection["MyKey"];
    return $"Hello, your setting value is: {mySettingValue}";
});

app.Run();

内容的提问来源于stack exchange,提问作者Q-bertsuit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:03:35