Alamofire Request 的多种编码类型

Multiple encoding types for Alamofire Request

我需要使用带有 JSON 对象的 HTTP 主体发出 POST 请求,但我还需要在同一个请求中使用 url 查询参数。

POST: http://www.example.com/api/create?param1=value&param2=value
HTTP Body: { foo : [ bar, foo], bar: foo}

Alamofire 支持吗?我该怎么做?

在这一点上,我决定通过使用 URL 参数手动编码 NSURLRequest 来解决这个问题,从该请求中检索 URL,并使用它来创建最后的要求。我已经为 return 查询参数编码请求创建了一个函数:

private func queryParameterEncodedRequestURL(urlString: String,
values: [String]) -> NSURL {

  let URL = NSURL(string: urlString)
  var request = NSURLRequest(URL: URL)

  let parameters = [
  "param1": values[0]!,
  "param2": values[1]!
  ]

  let encoding = Alamofire.ParameterEncoding.URL
  (request, _) = encoding.encode(request, parameters: parameters)

  return (request.URL, nil)
}

这很好用,但我绝对希望看到 Alamofire 更轻松地支持多种编码类型。这对我来说像是一种解决方法。

这绝对是一个有效的用例。我 运行 遇到了类似的问题,试图将访问令牌作为查询参数附加到 POST 请求。这是一个与您的方法类似的功能,应该暂时使事情变得更容易一些。

func multiEncodedURLRequest(
    method: Alamofire.Method,
    URLString: URLStringConvertible,
    URLParameters: [String: AnyObject],
    bodyParameters: [String: AnyObject]) -> NSURLRequest
{
    let tempURLRequest = NSURLRequest(URL: NSURL(string: URLString.URLString)!)
    let URLRequest = ParameterEncoding.URL.encode(tempURLRequest, parameters: URLParameters)
    let bodyRequest = ParameterEncoding.JSON.encode(tempURLRequest, parameters: bodyParameters)

    let compositeRequest = URLRequest.0.mutableCopy() as NSMutableURLRequest
    compositeRequest.HTTPMethod = method.rawValue
    compositeRequest.HTTPBody = bodyRequest.0.HTTPBody

    return compositeRequest
}

话虽如此,您能否确保在 Github 上提出功能请求问题?这当然是我们需要弄清楚如何在 Alamofire 中变得更容易的事情,因为它是如此常见的用例。如果您可以对您的用例进行非常好的描述,那么我相信它会引起注意。我一定会帮助媒体获得更多支持。