如何使用Refit生成带[]后缀的重复集合参数的HTTP请求?
如何使用Refit生成带[]后缀的重复集合参数的HTTP请求?
我太懂你这种踩坑的感觉了!之前折腾类似需求时也卡了好一会儿,你要的/users/list?ages[]=10&ages[]=20&ages[]=30这种格式,其实通过给Query属性设置正确的参数就能实现,先给你看可行的代码:
using Refit; public interface IUserApi { [Get("/users/list")] Task Search([Query(Name = "ages[]", CollectionFormat = CollectionFormat.Multi)] int[] ages); }
给你拆解下之前尝试没成功的原因:
- 第一种写法只加了
CollectionFormat.Multi,但没指定参数名要带[],Refit默认用参数变量名ages作为键,自然就没有后缀了 - 第二种误用了
Format属性,这个属性根本不是用来定义参数名称的,所以才会生成奇怪的ages=ages[]=10这种格式
上面的正确写法里:
Name = "ages[]"直接把参数键指定为带后缀的形式CollectionFormat.Multi告诉Refit要为数组的每个元素重复这个键(也就是每个元素都生成ages[]=值的片段)
另外补充个小细节:如果你的Refit版本比较新,CollectionFormat.Multi其实是数组类型参数的默认集合格式,所以你甚至可以省略这个参数,直接写[Query(Name = "ages[]")] int[] ages也能得到一样的效果,不过保险起见还是写上更清晰,避免不同版本的行为差异。
内容来源于stack exchange
相关产品推荐
相关产品推荐

