我正在尝试使用默认选项向 Alamofire 发出
.POST
请求:
Alamofire.request(.POST, url, parameters: parameters).validate().responseJSON
这个效果很好。正如文档所述,参数的默认编码是
.URL
。
现在我正在尝试按照本指南改进创建路由器的代码: https://grokswift.com/router/
在实现的最后需要手动对参数进行编码。因此,如果默认值有效,我现在在这里使用
.URL
编码,如下所示:
let encoding = Alamofire.ParameterEncoding.URL
let (encodedRequest, _) = encoding.encode(urlRequest, parameters: parameters)
现在请求将不起作用,因为参数显然是以错误的格式发送的。
我非常确定该 API 可以正常运行,我正在 Postman 中对其进行测试,并且参数是使用
form-data
选项发送的。
如果之前可以正常工作,请仔细检查它是否使用 URL 编码:
let postRequest = Alamofire.request(.POST, url, parameters: parameters)
.validate()
.responseJSON { ... }
debugPrint(postRequest)
这应该会显示与您的请求等效的 cURL 语句。
然后更改路由器以使用
.URL
编码并查看 debugPrint
输出是否发生变化。
根据我在 Swift 和 Objective-C 中的经验,当我们使用 POST 发出请求时,不应该要求通过编码传递 URL,除非存在任何特殊字符或空格。
如果您发出 GET 请求,那么您应该始终传递带编码的 URL。在 POST 中,无论您的参数是什么,都会在正文中作为表单数据传递。没有任何代码需要它们。
因此,在您的代码中,只需从 POST 方法中删除 URL Encode 部分即可。
您也可以将参数编码设置为JSON。
let encoding = Alamofire.ParameterEncoding.JSON