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

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]也可能无法被框架识别。
    解决方法二选一:
    1. 直接修改类名为hlthController,符合默认命名约定
    2. 在控制器类上额外添加[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作为启动配置:
    1. 在ConfigureServices方法中添加控制器服务注册
    2. 在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。
    解决方法:
    按照当前路由配置,两个接口的正确访问规则为:
    1. 无参Get接口:请求方法为GET,路径为{你的服务域名}/api/hlth
    2. 带参数的Get接口:请求方法为GET,路径为{你的服务域名}/api/hlth/[int类型数值]
  • 原因4:项目内存在路由冲突
    如果项目中其他控制器的[Route]配置和api/hlth完全一致,会触发路由匹配冲突,框架无法定位到对应控制器就会返回404。
    解决方法:检查所有控制器的路由配置,确保路由模板唯一,没有重复冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:24:02