在iOS中使用sendAchronousRequest:RequestAPI处理401状态码 [英] Handle 401 status code with sendAsynchronousRequest:request API in iOS

查看:45
本文介绍了在iOS中使用sendAchronousRequest:RequestAPI处理401状态码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用此方法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。

那么如何处理这种情况

问候 兰吉特

推荐答案

您正在将NSURLResponse转换为NSHTTPURLResponse,但这不会自动公开您在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
}

这篇关于在iOS中使用sendAchronousRequest:RequestAPI处理401状态码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆