我需要使用带有POST
对象的HTTP Body发出JSON
请求,但我还需要在同一请求中使用url查询参数。
POST: http://www.example.com/api/create?param1=value¶m2=value
HTTP Body: { foo : [ bar, foo], bar: foo}
这是否受到Alamofire的支持?我该怎么做呢?
答案 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更容易支持多种编码类型。这对我来说就像是一种解决方法。