参数键有方括号Alamofire iOS

时间:2017-07-31 17:03:13

标签: ios swift alamofire

如何阻止Alamofire编码(用%5B%5D替换方括号?)

我刚才看到有人对此发表评论,但我找不到问题的链接了。我的参数如下所示:

    let parameters: Parameters = [
        "xx[firebase_id]" : currentUserId,
        "xx[lat]"         : latitude,
        "xx[lng]"         : longitude,
        "xx[fcm_key]"     : fcmKey
    ]

在我的参数是一个集合之前,我遇到了一个非常类似的问题,解决方案就是删除括号,如下所示:

来自:["some_array_param[]" : someCollection]

到此["some_array_param" : someCollection]

回到我的简单问题,我应该和我的后端开发人员讨论这件事吗?或者有没有办法解决这个问题(没有手动将参数放在网址中)?

1 个答案:

答案 0 :(得分:1)

这是我通过编码参数完成它的方式:

// Remove square brackets for POST request
let parameterEncoding = ParameterEncoding.Custom { requestConvertible, parameters in
    let (mutableRequest, error) = ParameterEncoding.URL.encode(requestConvertible, parameters: parameters)
    let httpBody = NSString(data: mutableRequest.HTTPBody!, encoding: NSUTF8StringEncoding)!
    mutableRequest.HTTPBody = httpBody.stringByReplacingOccurrencesOfString("%5B%5D=", withString: "=").dataUsingEncoding(NSUTF8StringEncoding)
    return (mutableRequest, error)
}

然后将编码添加到帖子中:

Alamofire.request(.POST, "http://example.com", parameters: ["foo": ["bar1", "bar2"]], encoding: parameterEncoding)