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
相关产品推荐
相关产品推荐

