Alamofire使用公共密钥和多个值传递参数?

时间:2017-06-10 17:30:43

标签: ios swift alamofire

我需要在我的项目中执行此操作:

如果我手动将字符串附加到Alamofire中的URL,我可以轻松地执行此操作,但我不想这样做。我希望参数为参数对象。

参数的一个公共密钥中的多个值

enter image description here

我一直在做的事情:

public func findCreate(tags: [String], withBlock completion: @escaping FindCreateServiceCallBack) {

    /* http://baseurlsample.com/v1/categories/create_multiple?category_name[]=fff&category_name[]=sss */

    let findCreateEndpoint = CoreService.Endpoint.FindMultipleCategories

    let parameters: Parameters = ["category_name[]" : tags]

    Alamofire.request(
        findCreateEndpoint,
        method: .post,
        parameters: parameters,
        encoding: URLEncoding(destination: .queryString),
        headers: nil
        ).responseJSON { (response) in
            print(response)
    }
//....
}

如果我运行它的当前结果是可以的,但发送到服务器的值有[" &#34]。例如:

["chocolate"]

同样,问题是,我的整个代码中哪一部分我错了?如何发送具有一个公共密钥和多个值的上述参数?

我也尝试将编码选项添加到 Alamofire.request()如果我添加encoding: JSONEncoding.prettyPrintedencoding: JSONEncoding.default我会状态代码500

某些链接具有相同的问题,但没有确切的答案,我总是看到有答案的帖子,比如使用自定义编码等等。

其他信息:

这有效,但我需要发送多个字符串:

let parameters: [String : Any] = ["category_name[]" : tags.first!]

这也有效:

Alamofire.request("http://baseurlsample.com/v1/categories/create_multiple?category_name[]=fff&category_name[]=sss", method: .post).responseJSON { (data) in
    print(data)
}

1 个答案:

答案 0 :(得分:5)

You don't need a custom encoding for this format.

You can send parameters encoded like this:

category_name[]=rock&category_name[]=paper

By using URLEncoding (which you're already doing) and including the multiple values that should have the same key in an array:

let parameters: Parameters = ["category_name": ["rock", "paper"]]

It'll add the [] after category_name for you, so don't include it when you declare the parameters.