ASP.NET Boilerplate GET请求含List复杂对象入参反序列化空列表问题
问题核心原因
GET请求默认从查询字符串绑定参数,ASP.NET Core原生对查询字符串中嵌套的自定义类集合没有默认的自动绑定支持,且Swagger生成的GET请求参数格式往往不符合绑定要求,导致反序列化后得到空集合。
解决方案
方案1:显式指定参数绑定来源
在服务方法的入参前添加[FromQuery]特性,强制框架从查询字符串解析复杂模型:using Microsoft.AspNetCore.Mvc; public async Task<object> GetTargetsLocations([FromQuery] MyModel model) { .... }同时确认请求的查询字符串参数格式符合绑定规则,需要按索引传递集合元素,示例格式:
?Samples[0].item1=1.2&Samples[0].item2=3.4&Samples[1].item1=5.6&Samples[1].item2=7.8方案2:改用POST请求传递参数
复杂参数场景更推荐用POST请求,避免查询字符串长度限制和格式问题,修改方法如下:using Microsoft.AspNetCore.Mvc; [HttpPost] public async Task<object> GetTargetsLocations([FromBody] MyModel model) { .... }请求时在Body中传递JSON格式参数即可,示例:
{ "Samples": [ {"item1": 1.2, "item2": 3.4}, {"item1": 5.6, "item2": 7.8} ] }方案3:自定义模型绑定器(特殊场景可选)
如果必须使用GET请求且不能调整参数格式,可以自定义模型绑定器解析查询字符串中的Samples参数,该方案开发成本较高,非必要不推荐。
内容的提问来源于stack exchange,提问作者amir amirifar
相关产品推荐
相关产品推荐

