ASP.NET Core中使用FromForm绑定对象列表为空的问题咨询
ASP.NET Core表单数据绑定DTO对象列表为空的解决方案
问题本质
ASP.NET Core的表单模型绑定对复杂对象列表的提交格式有明确要求,并非功能限制。表单数据是扁平键值对结构,无法像JSON那样直接传递嵌套的列表对象,你当前的提交格式不符合绑定规则,才导致列表始终为空。
原始类型列表(如List<string>)能正常绑定,是因为它支持两种简化格式:
- 重复键名:
dtos=value1&dtos=value2 - 索引式键名:
dtos[0]=value1&dtos[1]=value2
但复杂DTO对象列表必须通过索引+属性名的键名来明确每个对象的属性,才能被绑定器识别。
正确的提交格式
要成功绑定List<Dto>,表单数据的键名需要遵循参数名[索引].属性名的格式,例如:
- 键:
dtos[0].Field,值:"test1" - 键:
dtos[1].Field,值:"test2"
Swagger UI的适配问题
默认Swagger UI在处理[FromForm]标记的复杂对象列表时,不会自动生成符合要求的表单字段格式,这就是你用Swagger提交后列表为空的直接原因。你可以手动在Swagger的表单中添加上述格式的键值对,即可完成正确绑定。
快速验证方法
用Postman等工具测试时:
- 设置请求方法为POST,Content-Type为
multipart/form-data - 添加多个键值对,键名按
dtos[N].Field格式填写(N从0开始递增) - 发送请求后,控制器就能正确接收DTO列表
内容的提问来源于stack exchange,提问作者kxyz
相关产品推荐
相关产品推荐

