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

AJAX调用控制器GetGtmGrid接口返回404错误如何排查解决

AJAX调用ASP.NET Core接口返回404问题排查

问题背景

AJAX发起GET请求调用控制器Action时始终返回404错误,其余同配置模式的接口可正常运行。

控制器代码(C#)

[HttpGet("~/TIB/Forms/GetGtmGrid")]
public IEnumerable<object> GetGtmGrid(int? id)
{
    DataTable dtbl = new DataTable();
    
    using (SqlConnection sqlConnection = new SqlConnection(_configuration.GetConnectionString("DB")))
    {
        sqlConnection.Open();
        
        SqlDataAdapter sqlData = new SqlDataAdapter("usp_GetGTMNotesById", sqlConnection);
        
        sqlData.SelectCommand.CommandType = CommandType.StoredProcedure;
        sqlData.SelectCommand.Parameters.AddWithValue("Id", id);
        
        sqlData.Fill(dtbl);
    }

    List<GTMNote> gtmNotes = new List<GTMNote>();

    for (int i = 0; i < dtbl.Rows.Count; i++)
    {
        gtmNotes.Add(new GTMNote
        {
            Id = Convert.ToInt32(dtbl.Rows[i]["Id"]),
            Text = dtbl.Rows[i]["Text"].ToString(),
            ProjectId = Convert.ToInt32(dtbl.Rows[i]["ProjectId"]),                   
            Date = (DateTime)dtbl.Rows[0]["Date"],
            StatusId = Convert.ToInt32(dtbl.Rows[i]["StatusId"])
        });
    }

    GTMNote[] gtmArray = gtmNotes.ToArray();

    return gtmArray;
}

AJAX调用代码(JavaScript/jQuery)

$.ajax({
    url: "/TIB/Forms/GetGtmGrid",
    type: "GET",
    dataType: "json",
    // 向控制器传递参数
    data: { id: id }
})

报错信息

GET https://localhost:<port>/TIB/Forms/GetGtmGrid?id=428 404

排查与修复方案

  • 优先排查路由配置冲突:当前Action使用~开头的绝对路由[HttpGet("~/TIB/Forms/GetGtmGrid")],这种写法会跳过控制器上的路由前缀、区域路由约束直接注册端点。如果其余同路径接口是通过控制器级[Route("TIB/Forms")]+Action级[HttpGet("GetGtmGrid")]的方式注册,建议改成和其他正常接口一致的路由写法,避免全局路由模板、区域路由规则拦截导致匹配失败。
  • 显式指定参数绑定源:如果项目全局开启了[ApiController]特性,部分版本的ASP.NET Core会对简单类型参数的绑定源推断失败,导致路由匹配时找不到符合参数要求的端点。给id参数显式添加[FromQuery]特性,明确指定从查询字符串取参:
    public IEnumerable<object> GetGtmGrid([FromQuery] int? id)
    
  • 排查重复路由定义:全局搜索代码库中是否存在其他同路径的Action定义,包括无参重载、参数类型不匹配的同路径路由。ASP.NET Core路由按注册顺序匹配,若存在同路径但参数约束不匹配的端点,会直接返回404,不会继续匹配后续符合条件的端点。
  • 开启路由调试日志定位根因:在应用启动配置中添加路由日志过滤,将路由匹配日志级别设为Trace,请求发起后可在控制台看到完整的路由匹配过程,直接定位未命中目标Action的具体原因:
    // Program.cs中,在注册控制器服务前添加
    builder.Logging.AddFilter("Microsoft.AspNetCore.Routing", LogLevel.Trace);
    
  • 附带逻辑bug修复:当前循环中Date = (DateTime)dtbl.Rows[0]["Date"]始终取第一行数据的日期字段,会导致所有返回条目日期错误,应修改为Date = (DateTime)dtbl.Rows[i]["Date"],该问题不会触发404,但会导致返回数据不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:06:34