0

嗨,我是 ios 的新手,在我的应用程序中,我ASIFormDataRequest早先使用过集成服务

现在我已经改变了格式,我正在使用NSURLSession而不是ASIFormDataRequest

ASIFormDataRequest但是,当我使用来自服务器的成功响应请求更改服务器密码但是当我使用NSURLSession来自服务器的失败响应时,请帮助解决问题

NSURlsession:-

def = [NSUserDefaults standardUserDefaults];
 NSString *myString = [def stringForKey:@"AccesToken"];
 NSString *AccessToken = [NSString stringWithFormat:@"Bearer %@",myString];

 NSString *Finalstr = [NSString stringWithFormat: @"MedicaidId=%@&OldPassword=%@&NewPassword=%@&ConfirmPassword%@", medicaId,self.CurPwdTxt.text,self.NewPwdTxt.text,self.ConfPwdTxt.text];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:mainurl,BaseURL]]

                                                           cachePolicy:NSURLRequestUseProtocolCachePolicy

                                                       timeoutInterval:60.0];

    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:[Finalstr dataUsingEncoding:NSUTF8StringEncoding]];
    [request addValue:AccessToken forHTTPHeaderField:@"Authorization"];

    NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {


        if (error) {

            NSLog(@"dataTaskWithRequest error: %@", error);
        }

        else if ([response isKindOfClass:[NSHTTPURLResponse class]]) {

            NSInteger statusCode = [(NSHTTPURLResponse *)response statusCode];

            if (statusCode != 200) {

                NSError *parseError;
                id responseObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError];

                 NSLog(@"responseobject is %@",responseObject);

            }else{

                NSError *parseError;

                id responseObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError];

                NSLog(@"else condtion");

                if (!responseObject) {

                    NSLog(@"JSON parse error: %@", parseError);

                    NSLog(@"responseobject is%@",responseObject);

                } else {


                    NSLog(@"responseobject is %@",responseObject);

                }

                //if response was text/html, you might convert it to a string like so:

                NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"final responseString = %@", responseString);
            }
        }
    }];

    [task resume];
}

ASIFormDataRequest:-

NSString *urlStr = [NSString stringWithFormat:@"myurl",BaseURL];
    NSLog(@"urlStr --->>> %@",urlStr);

    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:urlStr]];
    [request setRequestMethod:@"POST"];

    def = [NSUserDefaults standardUserDefaults];
    NSString *myString = [def stringForKey:@"AccesToken"];

    NSString *str = [NSString stringWithFormat:@"Bearer %@",myString];
    NSLog(@"token is %@",str);

    [request setPostValue:medicaId forKey:@"MedicaidId"];
    [request setPostValue:self.CurPwdTxt.text forKey:@"OldPassword"];
    [request setPostValue:self.NewPwdTxt.text forKey:@"NewPassword"];
    [request setPostValue:self.ConfPwdTxt.text forKey:@"ConfirmPassword"];
    [request addRequestHeader:@"Authorization" value:str];

    [request setDelegate:self];
    [request startAsynchronous];
4

1 回答 1

0

您在那里发送不同的请求。在“新”代码中,您正在构建 POST 数据,如下所示:

@"MedicaidId=%@&OldPassword=%@&NewPassword=%@&ConfirmPassword%@"

它看起来更像 GET 参数而不是表单编码(您在“旧”请求中使用)。

跟踪您的请求并使用Wireshark 之类的工具检查实际请求可能会帮助您下次自己发现问题。

于 2016-03-03T09:46:30.033 回答