2017-07-31 63 views
0

如何防止Alamofire编码(用%5B%5D替换我的方括号)?参数键有方括号Alamofire iOS

前段时间我看到有人对此发表评论,但是我找不到问题的链接了。我的参数看起来是这样的:

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]

所以回到我的简单问题,我应该只是跟我的后端开发人员谈论这个吗?或者有没有一种方法可以解决这个问题(无需手动将参数放入url中)?

回答

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) 
+0

真棒。看到这个答案的地方,但有点怀疑尝试了。现在就试试吧。 :D我会选择这个作为答案,如果这对我有用。 – Glenn

+0

您的代码没有更新,请尝试像下面这样更新:https://stackoverflow.com/a/40546670/3231194,但是,当您发布此代码时,您给了我一个尝试尝试的想法, ,我已经解决了我需要解决的问题。谢谢你。 – Glenn