【问题标题】:AFNetworking get JSON after 404 Bad Request still getting a JSON responseAFNetworking 在 404 错误请求后获取 JSON 仍然得到 JSON 响应
【发布时间】:2014-07-12 09:22:50
【问题描述】:

我有一个带有 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];

     }];

【问题讨论】:

  • 您的 NSError 中不是该消息吗?喜欢[错误用户信息]?
  • 如果我使用消息:[errorlocalizedDescription] 只看到 404 BAD REQUEST 但响应仍然显示请求出了什么问题。上面的例子 {"message":"Invalid Username or Password"}
  • 好的,我不明白你想做什么。为这两行添加您得到的响应:[errorlocalizedDescription] [error code]。然后添加您期望获得的内容。
  • 仅供参考 - 这是 400(错误请求)错误,而不是 404(未找到页面)错误。
  • @eddwinpaz 你是如何处理这个问题的?我也有同样的问题,求分享。谢谢

标签: ios json afnetworking-2


【解决方案1】:

@miho 的回答对我不起作用。据我所知,addAcceptableStatusCodes 在 AFNetworking 2.5.0 中不存在。我必须执行以下操作。

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 抱歉我的无知,但我在哪里添加这行代码?谢谢。
    • '[manager POST:' 返回一个'AFNetworkingOperation *operation = ...'。
    • 我已经像这样添加它并且仍然 addAcceptableStatusCodes:[NSIndexSet indexSetWithIndex:404]; [manager POST:@"domain.com/user-login" 参数:参数成功:^(AFHTTPRequestOperation *operation, id responseObject)
    • 很抱歉再次打扰您,但是您能解释一下如何使用我的代码定义操作吗?谢谢。我知道它会将 404 作为接受的代码添加到列表中,但仍然不知道在哪里添加此行以及从哪个操作变量获取。
    • 我在答案中又添加了一行代码,希望你知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2017-09-10
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    相关资源
    最近更新 更多