我在iOS上使用Alamofire时遇到问题(swift):
当我尝试发送一个带有以下参数的请求(在.POST或.PUT中)时:
parameters:["description": WhoGives, "images": (
{
container = offerImages;
name = "563f993e4b00ddad7ed42790_0.jpg";
},
{
container = offerImages;
name = "563f993e4b00ddad7ed42790_1.jpg";
}
)]
它会产生一个httpBody,如下所示:
description="WhoGives"&images[][container]=“offerImages”&images[][name]=“563f993e4b00ddad7ed42790_0.jpg”&images[][container]=“ offerImages”&images[][name]=“563f993e4b00ddad7ed42790_1.jpg"
我希望它是:
description="WhoGives"&images[0][container]=“offerImages”&images[0][name]=“563f993e4b00ddad7ed42790_0.jpg”&images[1][container]=“ offerImages”&images[1][name]=“563f993e4b00ddad7ed42790_1.jpg"
正如有人发现的那样?如果是,怎么做?
您需要使用.Custom
参数编码来完成此操作。由于没有发布关于集合URL编码的RFC规范,Alamofire使用了一个通用约定,该约定适用于许多服务器,但并非所有服务器。
以下是我们的ParameterEncoding
文档中的一个片段。
由于没有发布关于如何对集合类型进行编码的规范,因此将
[]
附加到数组值的键(foo[]=1&foo[]=2
),并将由方括号包围的键附加到嵌套字典值(foo[bar]=baz
)的约定。
要实现这一点,您需要将encode
方法中的逻辑与queryComponents
方法一起用于.URL
情况。您需要稍微更改queryComponents
方法,以便将数组索引放入参数值中。那你应该可以走了。