在404 Bad Request仍然获得JSON响应后,AFNetworking获取JSON

时间:2014-05-23 06:07:46

标签: ios json afnetworking-2

我有一个带有iOS应用程序的Django Rest Api,现在我正在测试AFNetworking来改变我的应用程序正在进行的HTTP请求,但我带来了这个我不知道如何处理的困境,首先是关于REST标准当我收到错误时,我应该返回404_BAD_REQUEST作为状态,如果发送或发生了错误,这是正常的。当AFNetworking看到这个404时,问题出现了。我仍然希望看到它返回的JSON。

curl -X POST http://domain.com:8000/user-login/ -d "nick=superUser&pass_field=superPassword"

我得到202状态HTTP:

{
 "nick": "eddwinpaz", "rate": 30, "name": "Eddwin Paz", "avatar": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn2/t1.0-1/p160x160/10270540_10154074250190063_1762683854515424400_n.jpg", "id": 9}eddwinpazs-MacBook-Pro:~ eddwinpaz$ 
}

当我得到404 BAD REQUEST时,我得到:

{"message": "Invalid Username or Password"}

如果我收到404错误

,我想获取该消息的json标记

我有以下代码。并将其放在警报

上的消息上
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

NSDictionary *parameters = @{@"nick": @"eddwinpaz",@"pass_field":@"eddwinpaz1"};

AFHTTPRequestOperation *operation = [manager POST:@"http://domain.com/user-login/"];
[operation addAcceptableStatusCodes:[NSIndexSet indexSetWithIndex:404]];

[manager POST:@"http://domain.com/user-login/" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject)
     {
         NSLog(@"JSON: %@", responseObject);

     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

         NSLog(@"Error: %@", error);

         UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Login Failed"
                                                         message:@"E-mail or password are wrong, Please Try Again"
                                                        delegate:nil
                                               cancelButtonTitle:@"OK"
                                               otherButtonTitles:nil];
         [alert show];
         [hud hide:YES];

     }];

2 个答案:

答案 0 :(得分:0)

默认情况下,错误代码404作为错误代码处理。您可以通过

将其添加为可接受的错误代码之一
AFHTTPRequestOperation *operation = [manager POST:@"http://doma...
[operation addAcceptableStatusCodes:[NSIndexSet indexSetWithIndex:404]];

然后在404响应中调用success:,您可以在那里处理它。

答案 1 :(得分:0)

@miho的回答对我不起作用。从我所知道的AFNetworking 2.5.0中不存在addAcceptableStatusCodes。我不得不做以下事情。

NSMutableIndexSet *acceptedCodes = [[NSMutableIndexSet alloc]
    initWithIndexSet:operation.responseSerializer.acceptableStatusCodes];
[acceptedCodes addIndex:304];
operation.responseSerializer.acceptableStatusCodes = [acceptedCodes copy];