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

.NET 6 WebApplicationFactory测试客户端控制器未映射返回404问题

问题根因

这个问题的核心原因是集成测试环境下MVC控制器的应用部件(Application Part)加载缺失,和你查到的Program类访问权限问题不是一类:

  • 直接启动应用时,程序入口就是你的API项目程序集,AddControllers()默认会自动把入口程序集加入控制器扫描列表,能正常发现所有控制器,所以接口访问没问题。
  • 跑集成测试时,xUnit测试运行器的程序集才是入口程序集,AddControllers()默认只会扫描测试入口程序集里的控制器,不会自动把你的API项目程序集加进扫描范围;而你手动写的MapGet最小API、SOAP接口都是显式注册的端点,不需要靠扫描程序集发现,所以能正常访问。
  • 其余正常迁移的项目,要么是配置时提前加载了API程序集,要么是显式注册过应用部件,所以没触发这个问题。
修复方法

修改ConfigureServices()里注册控制器的代码,显式把API项目自身的程序集加入应用部件列表就行:

builder.Services.AddControllers(opt => opt.AddGlobalErrorHandling())
    // 显式注册当前API程序集为控制器扫描源
    .AddApplicationPart(typeof(Program).Assembly);
builder.Services.AddSoapCore();

如果你的控制器是放在独立的类库里,把对应类库的程序集用同样方式加进去即可。
要是改完还没恢复,可以临时在ConfigureApp()里加段调试代码,打印所有已注册的端点,确认控制器路由是否真的加载成功:

app.Use(async (context, next) =>
{
    var dataSource = app.Services.GetRequiredService<EndpointDataSource>();
    foreach (var ep in dataSource.Endpoints)
    {
        Console.WriteLine($"已注册端点:{ep.DisplayName}");
    }
    await next();
});

内容的提问来源于stack exchange,提问作者ScottishTapWater

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:33:08