Alamofire .POST 编码 (.URL)

Alamofire .POST encoding (.URL)

所以,我正在尝试使用默认选项使用 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 选项发送参数。

提前感谢任何可以帮助我的人!

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

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

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

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

let encoding = Alamofire.ParameterEncoding.JSON

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

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

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

然后改变路由器使用.URL编码,看看debugPrint输出是否改变。