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

.NET 6迁移后MapControllers()无法找到端点,请求报404错误

.NET 6 WebApi迁移后404错误排查与解决

1. 确认控制器程序集被扫描

.NET 6 默认仅自动扫描Program.cs所在项目根命名空间下的控制器。若你的控制器位于其他命名空间或独立类库中,需显式指定扫描的程序集:

// 将YourController替换为你项目中任意一个控制器的类型
builder.Services.AddControllers()
    .AddApplicationPart(typeof(YourController).Assembly);

2. 修正中间件执行顺序

当前代码中UseStaticFiles的位置错误,静态文件中间件应放在路由中间件之前,同时确保路由相关中间件顺序符合规范:

var app = builder.Build();

// 正确顺序:静态文件 → 路由 → 授权 → 映射控制器
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllers();

app.Run();

3. 验证控制器路由模板

检查控制器的[Route]特性是否配置正确,示例:

[ApiController]
[Route("api/[controller]")] // 确保模板格式正确,如包含api前缀
public class TestController : ControllerBase
{
    [HttpGet]
    public IActionResult Get()
    {
        return Ok("test");
    }
}

请求URL需严格匹配路由模板,例如上述控制器对应的GET请求应为http://localhost:{port}/api/Test。

4. 检查启动配置文件

打开launchSettings.json,确认applicationUrl包含你实际请求的协议和端口,避免出现请求协议/端口与程序监听不匹配的情况:

"profiles": {
  "http": {
    "applicationUrl": "http://localhost:5000",
    // 其他配置...
  },
  "https": {
    "applicationUrl": "https://localhost:5001;http://localhost:5000",
    // 其他配置...
  }
}

5. 通过Swagger验证路由(可选)

添加Swagger中间件,可直观查看控制器是否被框架识别:

// 在服务注册阶段添加
builder.Services.AddSwaggerGen();

// 构建app后,开发环境启用Swagger
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

启动后访问/swagger,若看不到控制器接口,说明控制器未被正确扫描。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:27:21