如何在 Alamofire 中将原始数据作为参数发布?
Posted
技术标签:
【中文标题】如何在 Alamofire 中将原始数据作为参数发布?【英文标题】:How to post raw data as a parameters in Alamofire? 【发布时间】:2018-10-12 09:09:05 【问题描述】:如何在 Alamofire 中发布这种形式的参数?
["view_id":"108","Class_id":"VIII"]
像往常一样Alamofire
接受 [String:Any]
参数,当我在Alamofire
请求中输入此参数时,它会引发错误:
"extra call method"
【问题讨论】:
【参考方案1】:你说As normally Alamofire accept [String:Any] parameters
,然后你传递了[[String: Any]]
。
尝试在 hhtpBody 中传递您的数据。
let urlString = "yourString"
guard let url = URL(string: urlString) else return
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
do
request.httpBody = try JSONSerialization.data(withJSONObject: your_parameter_aaray)
catch let error
print("Error : \(error.localizedDescription)")
Alamofire.request(request).responseJSON (response) in
【讨论】:
已解决,谢谢【参考方案2】:您可以使用自定义编码来发送请求中的参数。检查Alamofire docs on custom-encoding
struct JSONStringArrayEncoding: ParameterEncoding
private let jsonArray: [[String: String]]
init(jsonArray: [[String: String]])
self.jsonArray = jsonArray
func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest
var urlRequest = try urlRequest.asURLRequest()
let data = try JSONSerialization.data(withJSONObject: jsonArray, options: [])
if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil
urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.httpBody = data
return urlRequest
使用方法:
Alamofire.request("https://myserver.com/api/path", method: .post, encoding: JSONStringArrayEncoding).responseJSON response in
【讨论】:
【参考方案3】:试试这个方法来解决:
Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: header).validate(statusCode: 200..<300) .responseJSON response in
【讨论】:
以上是关于如何在 Alamofire 中将原始数据作为参数发布?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Alamofire,swift 3 中将字典作为参数发送
在 swift 中使用 alamofire 将参数作为原始数据发送
有没有办法在 Alamofire 中将数据作为对象而不是参数发送?
如何在 Swift 3 中使用 Alamofire 在 POST 请求中将给定的 JSON 作为参数发送?