Alamofire请求的多种编码类型

时间:2015-03-06 22:22:14

标签: alamofire

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

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

这是否受到Alamofire的支持?我该怎么做呢?

2 个答案:

答案 0 :(得分:7)

这绝对是一个有效的用例。我尝试将访问令牌作为查询参数附加到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中变得更容易,因为它是一个常见的用例。如果您能够对您的用例进行非常好的描述,那么我相信它会受到关注。我一定会帮助按下来获得支持。

答案 1 :(得分:1)

此时,我已经决定通过手动编码带有URL参数的NSURLRequest,从该请求中检索URL并使用它来创建最终请求来解决此问题。我创建了一个函数来返回查询参数编码的请求:

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更容易支持多种编码类型。这对我来说就像是一种解决方法。