ASP.NET 5.0中通过jQuery AJAX传对象数组到控制器结果为null如何解决
根因分析
- 缺失
[FromBody]绑定特性:ASP.NET 5.0处理POST请求的JSON格式数据时,默认不会主动从请求体中解析绑定复杂类型参数,需要显式为参数添加[FromBody]注解。 - 前后端数据结构不匹配:前端提交的JSON是外层包裹
regions属性的对象,后端直接接收List<BoundingBoxModel>类型的参数,结构不一致导致解析失败。
修复方案
方案1:前后端对齐直接传递数组(更简洁,推荐)
- 调整前端AJAX请求参数,直接序列化数组,无需外层包裹对象:
$.ajax({ // 其余配置保持不变 data: JSON.stringify(regions), // 替换原有的JSON.stringify({'regions': regions}) })
- 给后端接口参数添加
[FromBody]特性:
[HttpPost] public IActionResult AddRegions([FromBody] List<BoundingBoxModel> regions) { JsonResult result = new JsonResult(this.Json(JsonConvert.SerializeObject(regions), System.Web.Mvc.JsonRequestBehavior.AllowGet)); return result; }
方案2:后端适配现有前端传参结构
如果不需要修改前端代码,可以新增一个参数包装类匹配前端的JSON结构:
// 新增包装类 public class RegionsPostModel { public List<BoundingBoxModel> Regions { get; set; } }
修改接口参数为包装类,同时添加[FromBody]特性:
[HttpPost] public IActionResult AddRegions([FromBody] RegionsPostModel postData) { var regions = postData.Regions; JsonResult result = new JsonResult(this.Json(JsonConvert.SerializeObject(regions), System.Web.Mvc.JsonRequestBehavior.AllowGet)); return result; }
附加校验
修改后如果仍有问题,可在浏览器控制台查看请求的Payload内容,确认数组内的Top/Left/Height/Width字段都是数值类型,没有出现字符串格式的数值导致类型转换失败。
内容的提问来源于stack exchange,提问作者Cress1004
相关产品推荐
相关产品推荐

