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

C#配置TestServer使用TestStartup返回404NotFound错误如何排查?

排查方向
  • 控制器程序集扫描缺失:ASP.NET Core 默认仅扫描 Startup 类所在的程序集 发现控制器、过滤器等组件。你将 TestStartup 放在单元测试项目后,框架默认不再扫描原 Web 项目的控制器程序集,找不到对应路由就会返回 404。可在 TestStartup 的 ConfigureServices 方法中显式添加原 Web 项目的应用部件解决:
public new void ConfigureServices(IServiceCollection services)
{
    base.ConfigureServices(services);
    // 替换为原Web项目中任意一个控制器的类型
    services.AddControllers()
            .AddApplicationPart(typeof(YourWebProjectController).Assembly);
}
  • ContentRoot 路径配置异常:你当前使用 Directory.GetCurrentDirectory() 作为内容根路径,单元测试运行时的工作目录大概率不是原 Web 项目的根目录,即便没有用到配置文件,也可能导致特性路由、规则路由等配置加载失败。可以显式指定原 Web 项目的物理路径作为内容根:
// 根据你的项目结构调整相对路径,定位到原Web项目的根目录
var webProjectRoot = Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), "..", "..", "..", "YourWebProjectName"));
builder.UseContentRoot(webProjectRoot);
  • Startup 配置继承问题:检查父类 Startup 的 ConfigureServices、Configure 方法是否存在基于当前程序集的条件逻辑,或者子类 TestStartup 重写方法时是否漏写 base 调用,导致控制器注册、路由配置等核心逻辑没有执行。
  • 环境适配问题:你显式指定了运行环境为 Test,检查原 Startup 中是否存在仅在 Development 环境才执行的注册逻辑,比如被 if (env.IsDevelopment()) 包裹的路由映射、服务注册代码,切换到Test环境后这部分逻辑不会生效,导致路由未注册。
  • 路由匹配规则定位:可开启路由 Debug 日志查看具体匹配过程,快速定位问题:
builder.ConfigureLogging(logging =>
{
    logging.AddConsole();
    logging.SetMinimumLevel(LogLevel.Debug);
});

内容的提问来源于stack exchange,提问作者Jaczura Zoltán

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:36:02