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

2024-05-05

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

如果我手动将字符串附加到 Alamofire 中的 URL,我可以轻松完成此操作,但我不希望这样做。我想要的参数为范围 object.

参数的一个公共键中有多个值

我一直在做什么:

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)
    }
//....
}

如果我运行此命令,当前结果没问题,但发送到服务器的值有 [" "]。例如:

["chocolate"]

同样,问题是,我的整个代码的哪一部分是错误的?如何发送像上面这样具有一个公共键和多个值的参数?

我也尝试过添加encoding的选项Alamofire.request()如果我添加encoding: JSONEncoding.prettyPrinted or encoding: JSONEncoding.default I get 状态码500.

一些链接有相同的问题但没有确切的答案,我总是看到有答案的帖子,例如使用自定义编码,仅此而已。

  • https://github.com/Alamofire/Alamofire/issues/570 https://github.com/Alamofire/Alamofire/issues/570

  • Moya/Alamofire - 具有相同键的 URL 编码参数 https://stackoverflow.com/questions/31910683/moya-alamofire-url-encoded-params-with-same-keys

附加信息:

这可行,但我需要发送多个字符串:

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)
}

您不需要此格式的自定义编码。

您可以发送如下编码的参数:

category_name[]=rock&category_name[]=paper

通过使用URLEncoding(您已经在这样做)并在数组中包含应该具有相同键的多个值:

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

它会添加[] after category_name对于你来说,所以当你声明时不要包含它parameters.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Alamofire 使用公共键和多个值传递参数? 的相关文章

随机推荐