如何从URL查询参数处理TestQuery中的Names数组?示例格式咨询
嵌套对象与集合的URL查询参数绑定方案(针对C# TestQuery结构)
可行性说明
完全可行,ASP.NET(Core/Framework)的默认模型绑定器支持嵌套对象和集合类型的查询参数绑定,只要遵循正确的参数格式即可。
为什么出现filter=%5Bobject%20Object%5D
你之前直接将filter对象拼接到查询字符串中,前端会把对象默认转为字符串[object Object],经过URL编码后就变成了%5Bobject%20Object%5D,这种格式后端无法识别绑定。
正确的查询字符串格式
注意:你问题中提到的statuses是笔误,对应C#类中的字段为Names,以下是两种合法的查询字符串格式:
方式一:重复键名(推荐,更简洁)
?sort=1&filter.Names=a&filter.Names=b&filter.Names=c
方式二:带索引的格式
?sort=1&filter.Names[0]=a&filter.Names[1]=b&filter.Names[2]=c
后端处理示例(ASP.NET Core)
在Controller的Action中直接接收TestQuery参数,框架会自动完成绑定:
[HttpGet("data")] public IActionResult GetTestData(TestQuery query) { // query.Sort 会被绑定为1 // query.Filter.Names 会被绑定为包含"a","b","c"的列表 return Ok(query); }
前端正确生成查询字符串的示例(JS)
避免直接拼接对象,使用URLSearchParams来生成合法的查询参数:
const queryParams = new URLSearchParams(); queryParams.set('sort', '1'); // 遍历集合添加参数 ['a', 'b', 'c'].forEach(name => { queryParams.append('filter.Names', name); }); // 生成最终的带查询参数的URL const url = `/api/data?${queryParams.toString()}`;
内容的提问来源于stack exchange,提问作者Egor Antonovich
相关产品推荐
相关产品推荐

