【发布时间】:2013-10-06 10:54:03
【问题描述】:
当切换到 AFNetworking 2.0 时,AFHTTPClient 已被 AFHTTPRequestOperationManager / AFHTTPSessionManager 取代(如迁移指南中所述)。我在使用 AFHTTPSessionManager 时遇到的第一个问题是如何检索失败块中的响应正文?
这是一个例子:
[self.sessionManager POST:[endpoint absoluteString] parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
// How to get the status code?
} failure:^(NSURLSessionDataTask *task, NSError *error) {
// How to get the status code? response?
}];
在成功块中,我想检索响应的状态码。 在失败块中,我想检索响应的状态代码和内容(在这种情况下是描述服务器端错误的 JSON)。
NSURLSessionDataTask 有一个 NSURLResponse 类型的响应属性,它没有 statusCode 字段。目前我可以像这样检索 statusCode:
[self.sessionManager POST:[endpoint absoluteString] parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
// How to get the status code?
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response;
DDLogError(@"Response statusCode: %i", response.statusCode);
}];
但这在我看来很难看。仍然无法弄清楚响应的正文。
有什么建议吗?
【问题讨论】:
-
这基本上就是你这样做的方式,没有更清洁的方法不下降到
[AFURLSessionManager dataTaskWithRequest:completionHandler:],它会通过相同的NSURLResponse(你也必须在那里投射) -
回答了如何获取 statusCode。不幸的是 NSHTTPURLResponse 不包含失败块中的正文/数据:(
-
如果您观察任务的 AFNetworkingTaskDidFinishNotification 通知,则该响应似乎在通知 userInfo 键 AFNetworkingTaskDidFinishResponseDataKey 中可用。如果这有帮助,我会把它写下来作为下面的答案。
-
如果这是唯一可用的解决方案,除了子类化管理器,那为什么不……伙计,完美工作的 AFHTTPClient 因概念上的怪异而被废弃!
-
您可以在 GitHub 上提出问题并要求将响应数据传递到错误的 userInfo 字典中。肯定会更干净!
标签: objective-c afnetworking-2