我看到有一个可以接受的HTTP状态代码列表,可以修改,但是我认为如果可以在故障块中获取http状态代码,它将更加干净。
好了,找到了操作对象的答案
failure:^(AFHTTPRequestOperation *operation, NSError *error){
NSLog(@"error code %d",[operation.response statusCode]);
}];
Answers:
好了,找到了操作对象的答案
failure:^(AFHTTPRequestOperation *operation, NSError *error){
NSLog(@"error code %d",[operation.response statusCode]);
}];
在较新版本的AFNetworking中,您可以从错误中检索响应对象:
[[[error userInfo] objectForKey:AFNetworkingOperationFailingURLResponseErrorKey] statusCode]
如果您要进一步处理错误并且不想传递响应对象,这将很方便。
NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]
对于AFNetworking 3.0,请使用
failure:^(NSURLSessionTask *operation, NSError *error) {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)operation.response;
httpResponse.statusCode;
NSLog(@"status code: %li", (long)httpResponse.statusCode);
}
NSInteger operationStatusCode = [operation.error代码];
NSInteger httpStatusCode = operation.response.statusCode;
如果请求被取消/无法访问/超时,httpStatusCode
将始终为0
。
或者,您可以通过了解问题来确定问题operationStatusCode
。它是一个NSError
对象。
operationStatusCode
则将为-1009
。operationStatusCode
将为-999
。您可以NSError
在Apple文档中查看所有其他代码及其说明。
对我来说有用在您的要求下添加以下行
manager.requestSerializer = [AFJSONRequestSerializer序列化器];
[operation.request HTTPMethod]