.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
相关产品推荐
相关产品推荐

