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

ASP.NET Core中AJAX请求无法抵达控制器方法的问题求助

AJAX调用控制器返回404的可能原因分析

针对你遇到的ASP.NET Core中AJAX POST请求无法到达控制器方法(返回404)的问题,结合你提供的代码,以下是常见的排查方向:

1. 路由路径不匹配

  • 控制器路由前缀问题:如果你的控制器类添加了[Route]特性(比如[Route("api/[controller]")]),AJAX请求的URL需要包含前缀,例如/api/City/GetCityConfigurations,而不是直接使用GetCityConfigurations/。
  • 相对路径错误:你当前使用的'GetCityConfigurations/'是相对路径,请求目标会依赖于当前页面的URL。比如当前页面URL是/Home/Index,实际请求的路径会是/Home/GetCityConfigurations/,如果你的控制器是CityController,这个路径必然不存在。建议改用绝对路径(如'/City/GetCityConfigurations'),或者在Razor视图/页面中用@Url.Action("GetCityConfigurations", "City")自动生成正确的URL。
  • 默认路由匹配问题:ASP.NET Core默认路由模板是{controller=Home}/{action=Index}/{id?},确保你请求的URL符合这个模板,比如控制器名为CityController,则正确的URL应为/City/GetCityConfigurations。

2. 控制器类配置问题

  • 确认你的控制器类继承自Controller(MVC场景)或ControllerBase(API场景),非继承的类不会被路由系统识别。
  • 检查控制器类是否被正确扫描到:确保控制器所在的程序集被包含在应用的程序集扫描范围内(默认会扫描启动项目的程序集,若控制器在类库中需额外配置)。

3. 参数绑定与代码笔误问题

  • 你控制器方法的参数是DSParamsDto dSParams,但代码中使用的变量是dataTableParams,这属于笔误,需修正为dSParams,否则会引发编译错误,部署后会导致方法无法访问。
  • DataTables的ServerSide模式默认会以x-www-form-urlencoded格式发送参数,而ASP.NET Core中复杂类型默认从请求体(JSON)绑定。若你的DSParamsDto未添加[FromForm]特性,可能导致参数绑定失败(通常返回400,但需排除此干扰):
    [HttpPost]
    public async Task<ActionResult> GetCityConfigurations([FromForm] DSParamsDto dSParams)
    

4. 防伪造令牌配置问题

虽然404错误通常与路由相关,但仍需确认防伪造令牌的服务端配置是否正确:

  • 若你在AJAX请求头中使用XSRF-TOKEN,需在Program.cs中配置Antiforgery服务以识别该头:
    services.AddAntiforgery(options =>
    {
        options.HeaderName = "XSRF-TOKEN";
    });
    
  • 确保页面中的__RequestVerificationToken是通过@Html.AntiForgeryToken()(Razor视图/页面)正确生成的,避免获取到无效令牌。

5. 部署与环境配置问题

  • 若部署在IIS上,检查IIS的URL重写规则是否干扰了路由匹配,确保ASP.NET Core的模块已正确安装。
  • 查看应用的启动日志,检查是否有路由注册失败的相关错误信息,帮助定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 15:23:26