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

ASP.NET Core AJAX传递JSON模型到控制器参数始终为null排查

问题根因

  1. 前端AJAX配置与实际传参格式不匹配:代码中声明了contentType: 'application/json; charset=utf-8',说明要向控制器传递JSON格式的请求体,但实际传参时直接把{ queryDetails }对象传给了data属性,jQuery默认会将该对象序列化为application/x-www-form-urlencoded格式的表单参数(也就是调试捕获到的键值对拼接格式),同时还多套了一层queryDetails的外层键,和控制器需要的QueryModel结构不匹配,模型绑定失败就会返回null。
  2. 路由配置冗余:Startup中配置的路由把queryDetails设为了路由参数,但接口是通过[FromBody]从请求体取参数,该路由配置完全无效,不影响本次问题但建议清理。

解决方法

方案1:保持JSON传参(推荐)

仅修改前端AJAX的传参逻辑,把queryDetails对象直接序列化为JSON字符串即可,不需要套外层对象:

$.ajax({
    type: 'POST',
    url: '/Home/SummaryRefresh',
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    // 仅修改本行,直接序列化queryDetails对象
    data: JSON.stringify(queryDetails),
    success: function () {
    },
    error: function (error) {
        alert(error);
    }
});

控制器代码无需修改。

方案2:使用表单格式传参

如果不需要用JSON传参,可以修改控制器去掉[FromBody]注解,同时删掉AJAX里的contentType配置:

$.ajax({
    type: 'POST',
    url: '/Home/SummaryRefresh',
    dataType: 'json',
    data: queryDetails,
    success: function () {
    },
    error: function (error) {
        alert(error);
    }
});

控制器对应调整:

[HttpPost]
public IActionResult SummaryRefresh(QueryModel queryDetails)
{
    // 原有逻辑不变
    if (queryDetails != null)
    {
        ViewData["QueryData"] = queryDetails;
        return View("Summary");
    }
    else 
        return BadRequest("Error refreshing view");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 23:57:02