.NET Core Web API中如何提交嵌套IFormFile列表?
解决嵌套层级IFormFile集合绑定问题
1. 确认DTO结构正确性
先确保你的ParentDto和ChildDto结构声明无误,嵌套子项与文件集合需初始化默认值避免空引用:
public class ParentDto { public List<ChildDto> Children { get; set; } = new List<ChildDto>(); } public class ChildDto { public string Value { get; set; } public List<IFormFile> Files { get; set; } = new List<IFormFile>(); public List<ChildDto> Children { get; set; } = new List<ChildDto>(); }
2. 修正Postman表单参数命名格式
ASP.NET Core默认表单绑定不支持JSON风格的[]嵌套命名,多层嵌套的IFormFile必须使用点分隔的索引链式命名:
- 错误格式(导致嵌套Files为null):
children[0][children][0].files - 正确格式:
Children[0].Children[0].Files[0]
Postman操作步骤:
- 切换请求体为
form-data格式 - 第一层子项文件:键填
Children[0].Files[0],选择对应文件 - 嵌套子项文件:键填
Children[0].Children[0].Files[0],选择对应文件 - 字符串字段同理:如
Children[0].Value、Children[0].Children[0].Value
3. 控制器端点显式指定绑定来源
因为混合了复杂对象与文件,必须在参数上添加[FromForm]特性,强制使用表单绑定:
[ApiController] [Route("api/[controller]")] public class PostController : ControllerBase { [HttpPost] public IActionResult Post([FromForm] ParentDto model) { // 业务逻辑处理 return Ok(model); } }
关键原因说明
ASP.NET Core的默认表单模型绑定器仅识别点分隔的索引命名规则,JSON风格的[]嵌套格式会导致绑定器无法解析嵌套层级的Files集合,最终赋值为null。按正确命名格式提交后,默认绑定即可正常工作。
内容的提问来源于stack exchange,提问作者Michele Benolli
相关产品推荐
相关产品推荐

