为何Query参数中的对象列表为Null?添加[FromQuery]仍无效
解决方案
问题根源
ASP.NET Core的Query字符串模型绑定对复杂对象列表有特定格式要求,默认不会自动识别任意格式的列表参数,这就是filters始终为空的原因——而name作为简单类型参数不受此限制。
正确的请求参数格式
你需要按照以下两种格式之一传递filters参数:
1. 带索引的格式
通过索引标识列表中的每个对象,适合属性较多的DTO场景:
/filter?filters[0].Index=1&filters[0].PropertyName=SpermCount&filters[1].Index=2&filters[1].PropertyName=Motility&name=testName
2. 重复键名格式
省略索引,直接重复对象的属性键名,ASP.NET Core会自动将同键名的参数打包为列表(适合结构简单的DTO):
/filter?filters.Index=1&filters.PropertyName=SpermCount&filters.Index=2&filters.PropertyName=Motility&name=testName
验证DTO定义
确保SpermFilterDTO是公共类,且属性具备公共的getter和setter,否则模型绑定无法完成赋值:
public class SpermFilterDTO { public int Index { get; set; } // 根据业务需求添加其他属性,例如: public string PropertyName { get; set; } public string Operator { get; set; } public string Value { get; set; } }
测试建议
如果用Swagger测试,可能需要手动构造上述格式的Query参数;默认Swagger支持带索引的参数格式,也可以直接在参数输入框按索引结构填写。
内容的提问来源于stack exchange,提问作者Pablo
相关产品推荐
相关产品推荐

