Alamofire 自定义参数编码
Alamofire Custom Parameter Encoding
我正在使用 Alamofire 并希望使用内容类型 "text/html; charset=utf-8" 对我的参数进行编码。我按照文档 https://github.com/Alamofire/Alamofire 进行自定义参数编码并创建了
let custom: (URLRequestConvertible, parameters: [String: AnyObject]?) -> (NSURLRequest, NSError?) = {
(URLRequest, parameters) in
let mutableURLRequest = URLRequest.URLRequest.mutableCopy() as! NSMutableURLRequest
mutableURLRequest.setValue("text/html; charset=utf-8", forHTTPHeaderField: "Content-Type")
mutableURLRequest.body = // don't know if I need to set this
return (mutableURLRequest, nil)
}
func postData(){
Alamofire.request(.POST, baseUrl, parameters: parameters, encoding: .Custom(custom))
.responseString{ (request, response, data, error) in
println("blah")
}
}
当我尝试在我的 Alamofire 请求中使用自定义并收到错误时遇到问题 "Cannot make responseString with argument list of type ( _, _, _, _)-> _ )" 但是,如果将编码更改为预设,这不是问题。URL 所以问题似乎出在我的自定义实现上?
如果有差异,我的参数在此处设置:
var parameters = [String: AnyObject]()
func setParams(){
parameters = [
"CONTRACT ID" : chosenContract!.iD.toInt()!,
"FEE AMOUNT" : 0,
"TRANSACT DATE" : today
]
}
你在这里有几个问题。让我们将它们分解为 1x1。
编译器问题
您的编译器问题是因为您的 return 元组类型错误。在 Alamofire 1.3.0 中,我们将 return 类型更改为 NSMutableURLRequest
,这最终使事情变得更加容易。那应该可以解决您的编译器问题。
设置 HTTP 正文
现在你有几个选择。
选项 1 - 将数据编码为 JSON
let options = NSJSONWritingOptions()
let data = try NSJSONSerialization.dataWithJSONObject(parameters!, options: options)
mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
mutableURLRequest.HTTPBody = data
From what you posted I'm assuming you actually want .URL encoding for the parameters.
选项 2 - 使用 .URL 案例
let parameters: [String: AnyObject] = [:] // fill in
let encodableURLRequest = NSURLRequest(URL: URL)
let encodedURLRequest = ParameterEncoding.URL.encode(encodableURLRequest, parameters).0
let mutableURLRequest = NSMutableURLRequest(URL: encodedURLRequest.URLString)
mutableURLRequest.HTTPMethod = "POST"
mutableURLRequest.setValue("text/html; charset=utf-8", forHTTPHeaderField: "Content-Type")
Alamofire.request(mutableURLRequest)
.response { request, response, data, error in
print(request)
print(response)
print(error)
}
希望这对您有所帮助。祝你好运!
我正在使用 Alamofire 并希望使用内容类型 "text/html; charset=utf-8" 对我的参数进行编码。我按照文档 https://github.com/Alamofire/Alamofire 进行自定义参数编码并创建了
let custom: (URLRequestConvertible, parameters: [String: AnyObject]?) -> (NSURLRequest, NSError?) = {
(URLRequest, parameters) in
let mutableURLRequest = URLRequest.URLRequest.mutableCopy() as! NSMutableURLRequest
mutableURLRequest.setValue("text/html; charset=utf-8", forHTTPHeaderField: "Content-Type")
mutableURLRequest.body = // don't know if I need to set this
return (mutableURLRequest, nil)
}
func postData(){
Alamofire.request(.POST, baseUrl, parameters: parameters, encoding: .Custom(custom))
.responseString{ (request, response, data, error) in
println("blah")
}
}
当我尝试在我的 Alamofire 请求中使用自定义并收到错误时遇到问题 "Cannot make responseString with argument list of type ( _, _, _, _)-> _ )" 但是,如果将编码更改为预设,这不是问题。URL 所以问题似乎出在我的自定义实现上?
如果有差异,我的参数在此处设置:
var parameters = [String: AnyObject]()
func setParams(){
parameters = [
"CONTRACT ID" : chosenContract!.iD.toInt()!,
"FEE AMOUNT" : 0,
"TRANSACT DATE" : today
]
}
你在这里有几个问题。让我们将它们分解为 1x1。
编译器问题
您的编译器问题是因为您的 return 元组类型错误。在 Alamofire 1.3.0 中,我们将 return 类型更改为 NSMutableURLRequest
,这最终使事情变得更加容易。那应该可以解决您的编译器问题。
设置 HTTP 正文
现在你有几个选择。
选项 1 - 将数据编码为 JSON
let options = NSJSONWritingOptions()
let data = try NSJSONSerialization.dataWithJSONObject(parameters!, options: options)
mutableURLRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
mutableURLRequest.HTTPBody = data
From what you posted I'm assuming you actually want .URL encoding for the parameters.
选项 2 - 使用 .URL 案例
let parameters: [String: AnyObject] = [:] // fill in
let encodableURLRequest = NSURLRequest(URL: URL)
let encodedURLRequest = ParameterEncoding.URL.encode(encodableURLRequest, parameters).0
let mutableURLRequest = NSMutableURLRequest(URL: encodedURLRequest.URLString)
mutableURLRequest.HTTPMethod = "POST"
mutableURLRequest.setValue("text/html; charset=utf-8", forHTTPHeaderField: "Content-Type")
Alamofire.request(mutableURLRequest)
.response { request, response, data, error in
print(request)
print(response)
print(error)
}
希望这对您有所帮助。祝你好运!