【问题标题】:Parameter Keys Have Square Brackets Alamofire iOS参数键有方括号 Alamofire iOS
【发布时间】:2017-07-31 17:03:13
【问题描述】:

如何防止 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]

回到我的简单问题,我应该和我的后端开发人员谈谈这个问题吗?或者有没有办法解决这个问题(无需手动将参数放入 url)?

【问题讨论】:

    标签: ios swift alamofire


    【解决方案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)
    

    【讨论】:

    • 太棒了。在某个地方看到了这个答案,但有点怀疑尝试一下。现在会试试看。 :D 如果这对我有用,我会选择这个作为答案。
    • 您的代码没有更新,请尝试像这样更新它:stackoverflow.com/a/40546670/3231194,但是,当您发布此内容时,您给了我一个尝试的想法,长话短说,我有修复了我需要修复的问题。谢谢你。
    猜你喜欢
    • 2021-01-03
    • 1970-01-01
    • 2019-07-02
    • 2014-11-26
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 2019-02-24
    • 2015-12-07
    相关资源
    最近更新 更多