.NET无法正确读取请求体?接口数组参数绑定报错求助
问题分析与解决方案
你的问题核心是请求JSON结构与后端参数绑定不匹配,同时存在JSON语法不规范的问题,以下是具体解决办法:
原因说明
当前控制器方法期望直接接收ChangeOrderDto[]类型的数组(即请求体根节点是数组),但你发送的请求是一个包含forums属性的对象,导致模型绑定失败,触发"forums field is required"的验证错误。另外[FromBody("forums")]无法解决问题,因为该特性仅对简单类型(如int/string)生效,不能用于数组或复杂对象的嵌套属性绑定。
方案一:修改请求JSON格式
直接发送数组格式的JSON,去掉外层的forums包装,同时修正JSON键名必须加双引号的语法问题:
[ {"id": 3, "order": 1, "parent_id": 1}, {"id": 4, "order": 2, "parent_id": 1} ]
此方案无需修改后端代码,保持原控制器方法即可。
方案二:修改后端参数结构
如果希望保留当前的请求JSON格式,需要创建一个包装类来匹配请求结构:
- 新增请求DTO类:
public class ChangeOrderRequestDto { public ChangeOrderDto[] Forums { get; set; } }
- 修改控制器方法的参数:
[HttpPost("change-order")] public async Task<ActionResult> ChangeOrder([FromBody] ChangeOrderRequestDto request) { foreach (var dto in request.Forums) { var forum = await context.Forums.FindAsync(dto.Id); if (forum is not null) { forum.Order = dto.Order; forum.ParentId = dto.ParentId; } } await context.SaveChangesAsync(); return Ok(); }
这样后端就能正确绑定你当前发送的包含forums属性的JSON请求。
内容的提问来源于stack exchange,提问作者miko25
相关产品推荐
相关产品推荐

