AFNetworking 2.0在故障块中从代码400获取JSON

Mac*_*y18 7 iphone objective-c ios afnetworking afnetworking-2

我使用AFHTTPRequestOperationManager了一个POST请求.现在我故意输入错误的信息来处理400错误代码.现在,Web服务实际上返回一个JSON消息,向用户解释他们做错了什么.我非常想让这个JSON显示消息UIAlertView.但是,失败块:

[operationManager POST:ServerURL parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Success: Status Code: %d", operation.response.statusCode);
}
 failure:^(AFHTTPRequestOperation *operation, NSError *error) {
     NSLog(@"Failed: Status Code: %d", operation.response.statusCode);
 }];
Run Code Online (Sandbox Code Playgroud)

不传递响应对象,如成功块中的响应对象.那么有谁知道如何访问Web服务返回的带有400错误的JSON?在NSError *error简单地给了我Request failed: bad request (400),而不是JSON返回.

任何帮助将不胜感激,
迈克

Jes*_*sak 8

查看代码- responseObject,似乎HTTP错误阻止了它的填充.您可以responseData直接抓取并自己解析,但我会说这是一个错误或一个很好的增强请求.(看起来- responseObject大概应该检查self.responseSerializationError,不self.error,决定是否应该尝试建立一个响应对象时.)

  • 您可能已经解决了这个问题,但您可以从故障块中的AFHTTPRequestOperation对象获取responseObject (4认同)

onm*_*133 5

您可以执行以下任一解决方案

1)将设置acceptableStatusCodes为接受您的400 statusCode,然后在成功块中进行处理

manager.responseSerializer.acceptableStatusCodes = [NSIndexSet indexSetWithIndex:400];
Run Code Online (Sandbox Code Playgroud)

2)创建一个自定义ResponseSerializer,例如JSONResponseSerializerWithData,将responseObject插入NSError userInfo中,并在失败块中进行处理

专业提示:AFNetworking是开源的,只需看一下AFHTTPRequestOperation的方法

setCompletionBlockWithSuccess:failure:

responseObject

error
Run Code Online (Sandbox Code Playgroud)