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

ASP.NET Core Web API中FromForm绑定List<ReservationQuota>失败问题

ASP.NET Core [FromForm]绑定List失败的解决思路
  • 修正表单提交格式:ASP.NET Core的[FromForm]默认不识别JSON格式的集合,它需要的是表单数组格式,比如ReservationQuota[0].category=General&ReservationQuota[0].reservation=50。你现在传的是JSON字符串,绑定器没法自动解析成List。
  • 手动解析JSON数据:既然Request.Form里已经拿到了正确的JSON,直接在控制器里反序列化就行:
    [HttpPost]
    public IActionResult CreateExam([FromForm] ExamCreateDTO dto)
    {
        if (Request.Form.TryGetValue("ReservationQuota", out var reservationJson))
        {
            dto.ReservationQuota = JsonSerializer.Deserialize<List<ReservationQuota>>(reservationJson);
        }
        // 后续业务逻辑
    }
    
  • 用[FromJson]特性自动绑定:给DTO里的ReservationQuota属性加[FromJson]特性,让绑定器自动解析JSON格式的表单字段。记得先引入Microsoft.AspNetCore.Mvc.NewtonsoftJson包,然后在Program.cs里配置:
    builder.Services.AddControllers().AddNewtonsoftJson();
    
    DTO修改如下:
    public class ExamCreateDTO : NamedObjectDTO
    {
        public string Scope { get; set; }
        public string Mode { get; set; }
        
        [FromJson]
        public List<ReservationQuota>? ReservationQuota { get; set; }
        
        public IEnumerable<IFormFile>? SampleFormFiles { get; set; }
    }
    
  • 检查DTO和嵌套类的访问权限:确保ReservationQuota类的category、reservation属性都是public且有getter和setter,ExamCreateDTO里的ReservationQuota属性也是public可读写的,继承的NamedObjectDTO没有影响绑定的特殊配置。
  • 调整Swagger配置:如果想让Swagger生成正确的表单输入项,可以安装Swashbuckle.AspNetCore.Annotations包,给属性加注解,帮助Swagger识别集合类型的表单字段,避免提交JSON格式的数据。

内容的提问来源于stack exchange,提问作者manjuv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 08:13:22