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

.NET 7 MVC项目Ajax传JSON时accountId为空的问题排查

问题分析与解决方案

问题根源

  1. GET请求参数机制:GET请求默认从URL查询字符串提取参数,你将数据JSON.stringify后,jQuery会把整个JSON字符串作为单一查询参数传递(比如?{"accountId":"123"}),控制器无法将其映射到accountId参数。
  2. JSON语法错误:你写的JSON.stringify代码混用了模板字符串反引号,格式完全错误,正确的JSON需用双引号包裹键名和字符串值。

解决方案

方案一:改用POST请求+实体类接收(推荐,符合JSON传递语义)

这是传递JSON数据的标准方式,适配.NET的参数绑定逻辑。

  1. 创建参数接收实体类
public class AccountRequest
{
    public string AccountId { get; set; }
}
  1. 修改控制器代码
[HttpPost]
public JsonResult GetAccount([FromBody] AccountRequest request)
{
    // 直接使用request.AccountId即可
    ...
}
  1. 修正Ajax代码
var requestData = JSON.stringify({
    accountId: "123"
});  

$.ajax({
    url: 'ManageUsers/GetAccount',
    type: 'POST',
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    data: requestData,
});

方案二:坚持使用GET请求(不推荐,仅作特殊场景适配)

如果业务上必须用GET,不要直接传JSON字符串,要么保持你原本的键值对方式,要么手动将JSON转为控制器可识别的格式:

  1. 修改控制器接收JSON字符串参数
using System.Text.Json;

[HttpGet]
public JsonResult GetAccount(string jsonData)
{
    var request = JsonSerializer.Deserialize<AccountRequest>(jsonData);
    var accountId = request?.AccountId;
    ...
}
  1. 调整Ajax传递方式
var requestData = JSON.stringify({
    accountId: "123"
});  

$.ajax({
    url: 'ManageUsers/GetAccount',
    type: 'GET',
    dataType: 'json',
    data: { jsonData: requestData }, // 将JSON串作为查询参数的value传递
});

关键注意点

  • GET请求不适合传递复杂JSON数据,存在URL长度限制,且不符合HTTP语义规范,优先用POST。
  • 确保JSON.stringify的参数是标准JS对象,不要混用模板字符串反引号,否则会生成无效JSON。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:54:57