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