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

ASP.NET Core Controller接收Ajax传JS数组超过11个为null如何解决

问题解决方法

你遇到的超过11个对象数组传递后后端接收为null的问题,可按以下步骤逐一排查修复:

1. 给Action参数添加[FromBody]特性

你前端传递的是application/json格式的请求体,ASP.NET Core默认模型绑定不会主动从请求体读取JSON内容,小数据量下偶然绑定成功属于异常情况,大数据量下会直接绑定失败返回null。修改Controller代码如下:

[Route("/Master/SaveMaster")]
[HttpPost]
public List<MasterError> SaveMaster([FromBody] List<MasterData> masterData)
{
    // 原有逻辑不变
}

2. 验证生成的JSON合法性

大数组序列化后可能因为CSV解析的特殊字符、空行等问题导致JSON格式损坏,后端反序列化失败。你可以在前端Save方法中加一行代码输出序列化结果:

data: JSON.stringify(employees),
// 加下面这行
console.log(JSON.stringify(employees))

将输出的内容复制到JSON校验工具中检查是否为合法格式,同时确认employees数组的长度、每个对象的属性是否符合预期,排除CSV解析多生成空对象、属性名错误的问题。

3. 调整ASP.NET Core默认绑定与序列化限制

如果确认JSON格式无误,可在Program.cs(.NET 6+)或Startup.cs中修改配置,调大相关限制:

调大集合绑定最大项数

builder.Services.AddMvc(options =>
{
    // 按需调整,这里设置为1000足够承载50个对象
    options.MaxModelBindingCollectionSize = 1000;
});

配置JSON序列化选项兼容更多场景

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        // 忽略前后端属性名大小写差异
        options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
        // 允许JSON尾部逗号
        options.JsonSerializerOptions.AllowTrailingCommas = true;
        // 调大序列化深度限制
        options.JsonSerializerOptions.MaxDepth = 64;
    });

4. 排查请求体原始内容

如果以上方法都无效,可以在Controller中先读取原始请求体确认内容是否正常传递,排查反序列化失败的具体原因:

[Route("/Master/SaveMaster")]
[HttpPost]
public async Task<List<MasterError>> SaveMaster()
{
    // 读取原始请求体
    string rawBody = await new StreamReader(Request.Body).ReadToEndAsync();
    // 手动反序列化,可打断点查看rawBody是否正确,反序列化是否报错
    var masterData = System.Text.Json.JsonSerializer.Deserialize<List<MasterData>>(rawBody);
    
    List<MasterError> masterErrorsList = new List<MasterError>();
    // 原有逻辑不变
    return masterErrorsList;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:27:02