如何添加Alamofire URL参数

时间:2017-04-07 15:47:44

标签: swift alamofire

我有一个使用Postman传递URL参数的工作场景。现在,当我尝试通过Swift中的Alamofire进行此操作时,它无效。

您如何在Alamofire中创建此网址? http://localhost:8080/?test=123

    _url = "http://localhost:8080/"
    let parameters: Parameters = [
        "test": "123"
        ]

    Alamofire.request(_url,
                      method: .post,
                      parameters: parameters,
                      encoding: URLEncoding.default,
                      headers: headers

2 个答案:

答案 0 :(得分:67)

问题是你正在使用URLEncoding.default。 Alamofire会根据您使用的HTTP URLEncoding.defaultmethod进行不同的解释。

对于GETHEADDELETE个请求,URLEncoding.default将参数编码为查询字符串并将其添加到URL,但是对于任何其他方法(例如如POST)参数被编码为查询字符串并作为HTTP请求的主体发送。

要在POST请求中使用查询字符串,您需要将encoding参数更改为URLEncoding(destination: .queryString)

您可以查看有关Alamofire如何处理请求参数here的详细信息。

您的代码应如下所示:

   _url = "http://localhost:8080/"
    let parameters: Parameters = [
        "test": "123"
        ]

    Alamofire.request(_url,
                      method: .post,
                      parameters: parameters,
                      encoding: URLEncoding(destination: .queryString),
                      headers: headers)

答案 1 :(得分:16)

如果希望在querystring中使用参数,请使用.queryString作为URLEncoding,如下所示: (我假设你在某处有标题)

let _url = "http://localhost:8080/"
let parameters: Parameters = [
    "test": "123"
    ]

Alamofire.request(_url,
        method: .post,
        parameters: parameters,
        encoding: URLEncoding.queryString,
        headers: headers)

这个表格是由Alamofire作者提出的,因为它更符合另一个,见截图: Excerpt from website

查看原始here