2014-05-23 2 views
3

iOS 앱이있는 장고 Rest API가 있고 지금은 HTTP 요청을 변경하기 위해 AFNetworking을 테스트하고 있습니다.하지만이 딜레마가 있습니다. 어떻게 처리 해야할지 모르겠다. REST 표준에서 에러가 발생하면 404_BAD_REQUEST를 상태로 반환해야한다. 즉, 보낸 메시지 나 잘못된 메시지가 있으면 OK이다. AFNetworking에서이 문제를 발견하면 문제가 발생합니다. 여전히 반환하는 JSON을보고 싶습니다.AFNetworking은 여전히 ​​JSON 응답을 얻은 후에 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 잘못된 요청을받을 때 내가 얻을 : 내가 404 오류가 발생하는 경우

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

내가 그 메시지 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

NSError에 해당 메시지가 없습니까? [error userInfo]와 (과) 비슷합니까? –

+0

메시지 : [error localizedDescription]을 사용하는 경우 404 BAD REQUEST 만 표시되지만 응답에는 요청에 잘못된 내용이 계속 표시됩니다. 위의 예 { "message": "Invalid Username or Password"} – eddwinpaz

+0

좋아, 어떻게하고 싶은지 이해가 안됩니다. 이 두 줄에 대한 응답을 추가하십시오. * [error localizedDescription] * * [error code] *. 그런 다음 얻을 것으로 예상되는 것을 추가하십시오. –

답변

0

기본적으로 오류 코드 404는 오류 코드로 처리됩니다. 그런 다음 success:가 404 응답에서 호출

AFHTTPRequestOperation *operation = [manager POST:@"http://doma... 
[operation addAcceptableStatusCodes:[NSIndexSet indexSetWithIndex:404]]; 

를 통해 접수 오류 코드 중 하나를 추가 할 수 있습니다 당신이 그것을 처리 할 수 ​​있습니다.

+0

죄송합니다.이 코드 줄을 추가하려면 어떻게해야합니까? 감사. – eddwinpaz

+0

'[관리자 POST :'는 'AFNetworkingOperation * 작업 = ...'을 반환합니다. – miho

+0

나는 이것을 다음과 같이 추가했습니다. addAcceptableStatusCodes : [NSIndexSet indexSetWithIndex : 404]; [관리자 POST : @ "http://domain.com/user-login/"매개 변수 : 매개 변수 성공 :^(AFHTTPRequestOperation * 작업, id responseObject) – eddwinpaz

0

@miho의 대답이 나를 위해 작동하지 않았습니다. addAcceptableStatusCodes AFNetworking 2.5.0에서 내가 말할 수있는 존재하지 않습니다. 나는 다음을해야했다.

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