ASP.NET Core 5 API项目新增控制器返回404无法正常工作如何解决
排查ASP.NET Core 5 API控制器404问题
问题代码
[Route("api/hlth")] [ApiController] public class hlth : ControllerBase { // GET: api/<hlth> [HttpGet] public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } // GET api/<hlth>/5 [HttpGet("{id}")] public string Get(int id) { return "value"; } }
常见原因及对应解决方法
- 原因1:控制器类不符合默认识别规则
ASP.NET Core 默认只会将类名后缀为Controller的类识别为控制器,你当前的类名是hlth没有对应后缀,即使加了[ApiController]也可能无法被框架识别。
解决方法二选一:- 直接修改类名为
hlthController,符合默认命名约定 - 在控制器类上额外添加
[Controller]特性,强制框架将其识别为控制器,修改后代码如下:
[Route("api/hlth")] [ApiController] [Controller] // 新增该行强制标记为控制器 public class hlth : ControllerBase { // 原有接口代码不变 [HttpGet] public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } [HttpGet("{id}")] public string Get(int id) { return "value"; } } - 直接修改类名为
- 原因2:启动配置中缺少控制器服务和路由映射
ASP.NET Core 5 需要在启动配置中显式注册控制器服务、配置控制器路由映射,缺少对应配置会导致路由完全无法匹配到控制器。
解决方法:
如果项目使用Startup.cs作为启动配置:- 在
ConfigureServices方法中添加控制器服务注册 - 在
Configure方法的端点配置中添加控制器路由映射,注意中间件顺序不能错
如果项目使用顶级语句的public void ConfigureServices(IServiceCollection services) { services.AddControllers(); // 确保存在该行 // 其他服务注册逻辑 } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 其他中间件:异常处理、HSTS、静态文件等 app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); // 确保存在该行,映射控制器路由 }); }Program.cs作为启动配置,确保存在builder.Services.AddControllers();和app.MapControllers();两行配置。 - 在
- 原因3:访问路径和请求方法不匹配
控制器注册正常的情况下,访问路径、请求方法不符合路由配置也会返回404。
解决方法:
按照当前路由配置,两个接口的正确访问规则为:- 无参Get接口:请求方法为GET,路径为
{你的服务域名}/api/hlth - 带参数的Get接口:请求方法为GET,路径为
{你的服务域名}/api/hlth/[int类型数值]
- 无参Get接口:请求方法为GET,路径为
- 原因4:项目内存在路由冲突
如果项目中其他控制器的[Route]配置和api/hlth完全一致,会触发路由匹配冲突,框架无法定位到对应控制器就会返回404。
解决方法:检查所有控制器的路由配置,确保路由模板唯一,没有重复冲突。
内容的提问来源于stack exchange,提问作者realPro
相关产品推荐
相关产品推荐

