Alamofire .POST 编码(.URL)

问题描述 投票:0回答:3

我正在尝试使用默认选项向 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
选项发送的。

ios swift postman alamofire
3个回答
2
投票

如果之前可以正常工作,请仔细检查它是否使用 URL 编码:

let postRequest = Alamofire.request(.POST, url, parameters: parameters)
  .validate()
  .responseJSON { ... }
debugPrint(postRequest)

这应该会显示与您的请求等效的 cURL 语句。

然后更改路由器以使用

.URL
编码并查看
debugPrint
输出是否发生变化。


0
投票

根据我在 Swift 和 Objective-C 中的经验,当我们使用 POST 发出请求时,不应该要求通过编码传递 URL,除非存在任何特殊字符或空格。

如果您发出 GET 请求,那么您应该始终传递带编码的 URL。在 POST 中,无论您的参数是什么,都会在正文中作为表单数据传递。没有任何代码需要它们。

因此,在您的代码中,只需从 POST 方法中删除 URL Encode 部分即可。


-1
投票

您也可以将参数编码设置为JSON。

let encoding = Alamofire.ParameterEncoding.JSON
© www.soinside.com 2019 - 2024. All rights reserved.