【问题标题】:Multiple encoding types for request in Alamofire 4Alamofire 4中请求的多种编码类型
【发布时间】:2017-08-24 15:55:00
【问题描述】:

我正在尝试使用 Alamofire 4 连接到需要身份验证令牌作为带有 JSON 正文的 POST 请求的查询参数的第 3 方 API。

这里提出了类似的问题:Multiple encoding types for Alamofire Request

我正在尝试使用 Alamofire 4 实现已接受的答案(答案使用了 Alamofire 3)。

这就是我正在做的事情:

let url = URL(string: urlString)!
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "POST"

let bodyParameters: [String: AnyObject] = [
    "inviter": inviterId as AnyObject,
    "invitee": inviteeId as AnyObject
]

let requestWithBody = try Alamofire.JSONEncoding.default.encode(urlRequest, with: bodyParameters)

let queryParameters: [String: AnyObject] = [
    "api_token": tokenString as AnyObject
]

var compositeRequest = try Alamofire.URLEncoding.default.encode(urlRequest, with: queryParameters)
compositeRequest.httpBody = requestWithBody.httpBody
return compositeRequest

代码编译并执行良好。但是,当我执行请求并将 response.request 打印到控制台时,请求 URL 不包含查询参数。

【问题讨论】:

    标签: alamofire


    【解决方案1】:

    这个版本的原版对我来说似乎可以正常工作(AF4/Swift4):

    fileprivate func multiEncodedURLRequest(
        method: HTTPMethod,
        requestURL: URL,
        parameters: Parameters,
        bodyParameters: Parameters) -> URLRequest
    {
        let request = URLRequest(url: requestURL)
    
        do {
            var urlRequest = try URLEncoding.default.encode(request, with: parameters)
            var bodyRequest = try JSONEncoding.default.encode(request, with: bodyParameters)
    
            urlRequest.httpMethod = method.rawValue
            urlRequest.httpBody = bodyRequest.httpBody
    
            return urlRequest
        }
        catch {
            return request
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-05-08
      • 2017-02-13
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多