.NET Core对象数组参数绑定失败,接收值为Null
问题分析与解决方案
我一眼就发现两个核心问题导致你的参数绑定失败,咱们一步步来修复:
1. 模型属性访问权限错误
你的AddOrderDetailsReq类里的ProductID和Qty都是私有(private)属性,而.NET Core的模型绑定系统只能读取和赋值公共(public)属性,私有属性根本无法被框架识别。
修改后的模型类:
public class AddOrderDetailsReq { public int? OrderID { get; set; } public int? ProductID { get; set; } // 把private改为public public int? Qty { get; set; } // 同上 }
2. 请求数据结构与后端接收参数不匹配
前端传递的是一个包裹着OrderDetails数组的对象({ OrderDetails: [...] }),但后端方法直接接收AddOrderDetailsReq[]数组,两者结构完全不匹配,框架无法正确解析数据。
你需要创建一个和前端数据结构完全对应的请求类:
// 新增匹配前端结构的请求容器类 public class OrderDetailsRequest { public List<AddOrderDetailsReq> OrderDetails { get; set; } } // 修改接口方法的参数类型 [HttpPost] [ActionName("AddOrderDetails")] public string AddOrderDetails([FromBody] OrderDetailsRequest request) { // 通过request.OrderDetails即可获取前端传递的数组 // 你的业务逻辑代码... return "操作成功"; }
可选优化:简化前端代码
Angular的$http会自动帮你序列化JSON对象,你不需要手动调用JSON.stringify,直接传递原始对象即可:
if (dataObj.OrderDetails.length > 0) { $http({ method: "POST", url: "/你的接口路径/AddOrderDetails", // 记得补全实际接口URL data: dataObj, // 直接传对象,无需手动序列化 headers: { 'Content-Type': 'application/json' } }).then(function(response) { // 处理成功回调 }, function(error) { // 处理错误逻辑 }); }
调整完成后,参数应该就能正常绑定了,赶紧试试吧!
内容的提问来源于stack exchange,提问作者Charles Morrison
相关产品推荐
相关产品推荐

