Alamofire Request 的多种编码类型
Multiple encoding types for Alamofire Request
我需要使用带有 JSON
对象的 HTTP 主体发出 POST
请求,但我还需要在同一个请求中使用 url 查询参数。
POST: http://www.example.com/api/create?param1=value¶m2=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 中变得更容易的事情,因为它是如此常见的用例。如果您可以对您的用例进行非常好的描述,那么我相信它会引起注意。我一定会帮助媒体获得更多支持。
我需要使用带有 JSON
对象的 HTTP 主体发出 POST
请求,但我还需要在同一个请求中使用 url 查询参数。
POST: http://www.example.com/api/create?param1=value¶m2=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 中变得更容易的事情,因为它是如此常见的用例。如果您可以对您的用例进行非常好的描述,那么我相信它会引起注意。我一定会帮助媒体获得更多支持。