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

ASP.NET MVC POST请求后控制器接收参数为空问题排查

问题描述

尝试发送一个包含约600个Customer类型对象的数组,Customer类定义如下:

public class Customer
{
  int ID {get; set;}
  string Name {get; set;}
  string LastName {get; set;}
}

前端通过JavaScript的AJAX发送数据,代码如下:

function ExecuteSendCustomerData(customers) {
            $.ajax({
                type: "POST",
                dataType: 'json',
                contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
                data: JSON.stringify(customers),
                url: "/MyHomeController/SendCustomerDataToBackend",
            });
}

后端HomeController中的方法定义如下:

[HttpPost]
public void SendCustomerDataToBackend(string myJsonData) // 该参数始终为null
{    
    var deserializedNodeData = JsonSerializer.Deserialize<IEnumerable<Customer>>(myJsonData);
     //...后续处理逻辑
}

已确认前端调用ExecuteSendCustomerData时,customers参数包含600条有效数据,但控制器中的myJsonData始终为null,请问问题出在哪里?

问题原因与修复方案

1. 请求内容类型与数据格式不匹配

当前AJAX设置的contentType是application/x-www-form-urlencoded,但发送的是JSON.stringify(customers)生成的纯JSON字符串。后端默认不会将这种格式的请求体解析为string类型参数,导致myJsonData为null。

修复方法:
将AJAX的contentType改为application/json; charset=UTF-8,让后端正确识别请求体中的JSON数据。修改后的JS代码:

function ExecuteSendCustomerData(customers) {
            $.ajax({
                type: "POST",
                dataType: 'json',
                contentType: 'application/json; charset=UTF-8', // 修改此处
                data: JSON.stringify(customers),
                url: "/MyHomeController/SendCustomerDataToBackend",
            });
}

2. 后端参数接收方式问题

即使修改了contentType,直接用string myJsonData接收仍可能存在问题(.NET默认会尝试将JSON直接绑定到强类型对象,而非原始字符串)。有两种处理方式:

方式一:直接接收强类型集合(推荐)

省去手动反序列化步骤,直接让框架完成绑定:

[HttpPost]
public void SendCustomerDataToBackend(IEnumerable<Customer> customers)
{    
    // 直接使用customers集合进行后续处理
}

方式二:接收原始JSON字符串

给参数添加[FromBody]特性,明确告诉框架从请求体中读取原始JSON内容:

[HttpPost]
public void SendCustomerDataToBackend([FromBody] string myJsonData)
{    
    var deserializedNodeData = JsonSerializer.Deserialize<IEnumerable<Customer>>(myJsonData);
     //...后续处理逻辑
}

3. 额外检查点

  • 确认路由是否正确:若控制器类名为HomeController,路由通常应为/Home/SendCustomerDataToBackend,而非/MyHomeController/...,避免路由不匹配导致请求未命中目标方法。
  • 检查请求体大小限制:600条对象的数据量可能触发后端的请求体大小限制,若出现413错误,需在配置中调整最大请求体限制参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:04:59