2015-02-09 77 views
0

我正在使用這種方式在我的應用程序中登錄API。使用sendAsynchronousRequest處理401狀態碼:iOS中的請求API

NSString *url = [NSString stringWithFormat:@"%@//login",xyz]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]]; 


    NSError *error; 
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error]; 
    if (!jsonData) { 
     NSLog(@"Error creating JSON object: %@", [error localizedDescription]); 
    } 


    [request setValue:@"application/json;charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 
    [request setValue:APIKEY forHTTPHeaderField:@"X_API_KEY"]; 

    [request setHTTPMethod:@"POST"]; 
    [request setHTTPBody:jsonData]; 

    [NSURLConnection sendAsynchronousRequest:request 
    // the NSOperationQueue upon which the handler block will be dispatched: 
             queue:[NSOperationQueue mainQueue] 
          completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 
    { 
     NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; 

     NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData: data options: 0 error: &error]; //I am using sbjson to parse 

     if(httpResponse.statusCode == 200) 
     { 

      //Show message to user success 
     } 
     else if(httpResponse.statusCode == 401) 
     { 
      //Show message to user -fail 
     } 
     else if(httpResponse.statusCode == 500) 
     { 
      //Show message to user- server error 
     } 
    }]; 

當我使用正確的用戶名和密碼,我得到的HttpResponse和狀態代碼爲200元。但如果使用錯誤的用戶名和密碼,我沒有得到401

那麼如何處理這種情況

問候 蘭吉特

+0

401聽起來像是對錯誤憑證的合理迴應,但是什麼使得您確定這是服務器的設計?也許響應主體包含一個線索。 – danh 2015-02-09 15:51:56

+0

@danh,正如你在上面的代碼中看到的那樣,我是在狀態碼的基礎上檢查它的,截至目前我沒有得到任何狀態碼,當憑據錯誤時,我在錯誤代碼中得到錯誤代碼:104。所以你建議我在檢查時使用它? – Ranjit 2015-02-10 06:28:15

回答

0

您鑄造你的NSURLResponseNSHTTPURLResponse但這不會自動暴露實際的v你期望在statusCode財產。

相反,您應該檢查error屬性是否已填充,並檢查code屬性。

if(error) 
{ 
    NSLog(@"error: %@", error.code); 

    if(error.code == 401) 
    { 
     //handle 401 errors 
    } 
    else if(error.code == 500) 
    { 
     //handle 500 errors 
    } 
} 
else 
{ 
    //successful request 
} 
+0

對於401,錯誤代碼實際上應該是'kCFURLErrorUserCancelledAuthentication',對於500,錯誤代碼應該是'kCFURLErrorBadServerResponse' – Guilherme 2015-02-10 12:22:58

相關問題