使用 Alamofire 3.0+ 在 swift 2.2 中使用 JSON 对象发送 POST 请求
Posted
技术标签:
【中文标题】使用 Alamofire 3.0+ 在 swift 2.2 中使用 JSON 对象发送 POST 请求【英文标题】:Send a POST request with JSON Object in swift 2.2 With Alamofire 3.0+ 【发布时间】:2016-04-27 16:04:33 【问题描述】:我想在 swift 2.2 中使用 Alamofire for i 代码发送带有 .POST 请求的 Json 对象,如下所示:
let dictionary: [String: AnyObject] = [
"cUserEmail" : "abc@abc.com",
"cUserPassword" : "abc",
"cDeviceId" : "asdf"
]
let url = NSURL(string: endPoint)
let request = NSMutableURLRequest(URL:url!)
request.HTTPMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(dictionary, options: NSJSONWritingOptions.PrettyPrinted)
Alamofire.request(request)
.responseJSON response in
// do whatever you want here
switch response.result
case .Failure(let error):
print(error)
case .Success(let responseObject):
print(responseObject)
但上面提到的代码不起作用。 以前,在objective-c中我使用的代码如下:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
manager.securityPolicy.allowInvalidCertificates = YES;
[manager POST:URLString parameters:dictionary success:^(AFHTTPRequestOperation *operation, id responseObject)
failure:^(AFHTTPRequestOperation *operation, NSError *error)
];
简而言之,我想要 swift 2.2 与 Alamofire 的等效代码。
【问题讨论】:
【参考方案1】:尝试对这样的正文使用空选项:
request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(dictionary, options: [])
【讨论】:
【参考方案2】:我通过以下方法找到了我的解决方案 希望它对你有用...
let dictionary: [String: AnyObject] = [
"cUserEmail" : "abc@abc.com",
"cUserPassword" : "abc",
"cDeviceId" : "asdf"
]
let request2 = Alamofire.request(.POST, "http://localhost:8080/api/v1/register", parameters: dictionary, encoding: .JSON)
request2.validate()
request2.responseJSON(completionHandler: (let response) in
let data = response.data!
do
let json = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments)
print ( "json is \(json)")
catch
print("error serializing JSON: \(error)")
self.showAlert("Error :\(error)")
)
【讨论】:
以上是关于使用 Alamofire 3.0+ 在 swift 2.2 中使用 JSON 对象发送 POST 请求的主要内容,如果未能解决你的问题,请参考以下文章
如何使用参数 swift 3.0 Alamofire 4.0 调用邮政服务?
使用 Alamofire 3.0+ 在 swift 2.2 中使用 JSON 对象发送 POST 请求
Alamofire 自定义响应从 Alamofire v1.3 迁移到 3.0(和 Swift 2 语法)
在 Swift 3.0 中设置 Alamofire 自定义目标文件名而不是使用建议的DownloadDestination
使用 Swift 3.0 的 Alamofire 4 失败:错误域 = NSURLErrorDomain 代码 = -999 “已取消”