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

如何通过AJAX请求将JSON字符串传递给.NET Core控制器方法?

解决.NET Core控制器接收JSON参数为null的问题

我尝试将JSON数据通过AJAX传递给.NET Core控制器方法,但方法内的参数值始终为null。已经将places设为字面量确保传递的是合法JSON,但问题依旧。

前端代码

function GetRatedPlaces(places) {
    places = { name: "John", age: 30, city: "New York" };
    var placesJson = JSON.stringify(places);
    console.log(placesJson);
    $.ajax({
        type: 'POST',
        url: '@Url.Action("GetRatedPlaces", "Home")',
        contentType: 'application/json',
        data: placesJson,
        cache: false,
        success: function (result) {
            // Handle the response from the controller
        }
    });
}

控制器代码

[HttpPost]
public IActionResult GetRatedPlaces([FromBody] string places)
{
    // Deserialize places here.
    return Ok();
}

问题原因

当使用[FromBody] string places接收参数时,.NET Core期望的是JSON格式的字符串(即被双引号包裹的字符串,例如"{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}"),但当前传递的是一个JSON对象({"name":"John",...}),框架无法将JSON对象直接解析为string类型,因此参数值为null。

方案一:使用实体类接收(推荐)

定义与JSON结构匹配的实体类,让框架自动完成绑定,这是.NET Core处理JSON参数的标准方式:

  1. 创建实体类:
public class PlaceModel
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string City { get; set; }
}
  1. 修改控制器方法:
[HttpPost]
public IActionResult GetRatedPlaces([FromBody] PlaceModel places)
{
    // 直接使用places的属性,无需手动反序列化
    // 例如:var name = places.Name;
    return Ok();
}

前端代码无需修改,保持原有写法即可。

方案二:强制传递JSON字符串(仅适用于必须用string接收的场景)

如果一定要用string类型接收,需要将JSON字符串再次序列化,让传递的内容是一个符合JSON格式的字符串:

修改前端代码中的placesJson赋值:

var placesJson = JSON.stringify(JSON.stringify(places));

此时传递的内容是"{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}",框架会正确解析为string类型的参数。

内容的提问来源于stack exchange,提问作者B. Jones

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:05:14