我有一个使用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
答案 0 :(得分:67)
问题是你正在使用URLEncoding.default
。 Alamofire会根据您使用的HTTP URLEncoding.default
对method
进行不同的解释。
对于GET
,HEAD
和DELETE
个请求,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作者提出的,因为它更符合另一个,见截图:
查看原始here