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

.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格式,需要创建一个包装类来匹配请求结构:

  1. 新增请求DTO类:
public class ChangeOrderRequestDto
{
    public ChangeOrderDto[] Forums { get; set; }
}
  1. 修改控制器方法的参数:
[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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:20:27