0

アプリのログインページを作成しています。クレデンシャルの詳細は DB に保存されます。だから私はASP.Netミドルウェアサービスを作っています。

以前は、URL STRING に詳細を追加するリクエストを送信するために GET メソッドを実行していました (これは今は必要ありません)。POST メソッドを実行したいと考えています。そのための非常に良いリンクを1つ見つけましたが、正しく実行したかどうか、またはASP.netの同僚が機能していないために間違いを犯したかどうかはわかりませ

資格情報、つまりユーザー名とパスワードが正しい場合、サービスは次のような XML を返します。

<result>
    success
</result>

そうでない場合は失敗します。

ですから、このコードが正しいかどうか、そうでない場合は何が間違いかを教えてください....お時間をいただきありがとうございます。

コード: -

@class FirstViewController;
@interface TestLoginViewController : UIViewController<UITextFieldDelegate,NSXMLParserDelegate>{

    IBOutlet UITextField *txtUserName,*txtPassword;
    IBOutlet UIButton *submitDetails;

    FirstViewController *viewController;
    NSString *currentElement,*status;
    NSString *loginName,*password;
}

@property (nonatomic,retain) IBOutlet UITextField *txtUserName;
@property (nonatomic,retain) IBOutlet UITextField *txtPassword;

@property (retain) NSString *loginName;
@property (retain) NSString *password;
@property (retain) NSString *status;

-(IBAction)onTapSubmit:(id)sender;
-(IBAction)onTapReset;

@end


-(IBAction)onTapSubmit:(id)sender{
    NSLog(@"UserName :- %@",txtUserName.text);
    NSLog(@"Password :- %@",txtPassword.text);
    if(![txtUserName.text isEqualToString:@""] && ![txtPassword.text isEqualToString:@""]){

  //      NSString *uName = txtUserName.text;
   //     NSString *uPass = txtPassword.text;

    //    NSString *post = [NSString stringWithFormat:@"username=%@&password=%@",[self urlEncodeValue:uName],[self urlEncodeValue:uPass]];


        NSString *temp1 = [@"username=" stringByAppendingString:txtUserName.text];
        NSString *temp2 = [temp1 stringByAppendingString:@"&password="];
       NSString *post = [temp2 stringByAppendingString:txtPassword.text];

        NSLog(@"Post String ==== %@",post);

        NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

        NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];

        NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
        [request setURL:[NSURL URLWithString:@"http://iphonewebserver.wsisites.net/Default.aspx"]];
        [request setHTTPMethod:@"POST"];
        [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
        [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
        [request setHTTPBody:postData];
        NSXMLParser *parser= [[NSXMLParser alloc]initWithData:postData];

**EDITED :-**


NSURLResponse *response;
        NSError *error;
        NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
        NSLog(@"Succeeded! Received %d bytes of data",[urlData length]);
        NSString *outputdata = [[NSString alloc] initWithData:urlData encoding:NSASCIIStringEncoding];
        NSLog(@"%@", outputdata);

**//Nslog output

 Succeeded! Received 39 bytes of data
2011-12-14 21:28:21.461 TestLogin[1094:207] <result><login>success</login></result>
2011-12-14 21:28:21.463 TestLogin[1094:207] Status======= (null)**

   /*     
        NSMutableString *strURL=[[NSMutableString alloc] init];
        [strURL appendFormat:@"http://iphonewebserver.wsisites.net/Default.aspx?username="];
        [strURL appendFormat:@"%@",txtUserName.text];
        [strURL appendFormat:@"&password="];
        [strURL appendFormat:@"%@",txtPassword.text];

        NSLog(@"urlformed:-%@",strURL);

        NSURL *url= [NSURL URLWithString:strURL];

        NSData *data= [NSData dataWithContentsOfURL:url];
        [strURL release];

        NSXMLParser *parser= [[NSXMLParser alloc]initWithData:data];
    */

        parser.delegate=self;
        [parser parse];
        [parser release];

 //       if([self.status isEqualToString:@"success"]){
        if(self.status){
            viewController = [[FirstViewController alloc]initWithNibName:@"FirstViewController" bundle:nil];
            [self presentModalViewController:viewController animated:YES]; 
        }
        else {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Login Failed !!! " message:@"Please Enter Correct Username and Password" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
            [alert release];
            NSLog(@"%@",self.status);
        }
    }
    else{
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Login Failed !!! " message:@"Please Enter the Username and Password" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK",nil];
        [alert show];
        [alert release];

    }

}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if(buttonIndex == 0)
    { 
        [self onTapReset];
    }

}

- (void)viewDidLoad
{
    [super viewDidLoad];
    txtUserName.delegate = self;
    txtPassword.delegate = self;
    txtUserName.text = @"admin";
    txtPassword.text = @"pass";
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{

    currentElement = elementName;
    if([elementName isEqualToString:@"result"]) {
        NSLog(@"%@",currentElement);
    }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    if([currentElement isEqualToString:@"login"]){
        self.status=[NSString stringWithFormat:@"%@",string];
        NSLog(@"%@",self.status);
    }
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

    currentElement=@"";//required to reset current element

}

@end

投稿に欠けているものがあれば教えてください。:))

4

2 に答える 2

1

リクエストを作成しましたが、どこにも送信していません。リクエストを使用してNSURLConnection
オブジェクトを インスタンス化します。これにより、サーバーに送信され、結果がデリゲートに報告されます。

于 2011-12-14T14:43:36.923 に答える
0

最後に、通常は非常に基本的な間違いを犯していたので、コードが機能するようになりました....パーサーに解析する正しいデータを与えていませんでした....これはすべて正常に機能するコードです。

コード :-

@class FirstViewController;
@interface TestLoginViewController : UIViewController<UITextFieldDelegate,NSXMLParserDelegate>{

    IBOutlet UITextField *txtUserName,*txtPassword;
    IBOutlet UIButton *submitDetails;

    FirstViewController *viewController;
    NSString *currentElement,*status;
    NSString *loginName,*password;
}

@property (nonatomic,retain) IBOutlet UITextField *txtUserName;
@property (nonatomic,retain) IBOutlet UITextField *txtPassword;

@property (retain) NSString *loginName;
@property (retain) NSString *password;
@property (retain) NSString *status;

-(IBAction)onTapSubmit:(id)sender;
-(IBAction)onTapReset;

@end


-(IBAction)onTapSubmit:(id)sender{
    NSLog(@"UserName :- %@",txtUserName.text);
    NSLog(@"Password :- %@",txtPassword.text);
    if(![txtUserName.text isEqualToString:@""] && ![txtPassword.text isEqualToString:@""]){

        NSString *temp1 = [@"username=" stringByAppendingString:txtUserName.text];
        NSString *temp2 = [temp1 stringByAppendingString:@"&password="];
       NSString *post = [temp2 stringByAppendingString:txtPassword.text];

        NSLog(@"Post String ==== %@",post);

        NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

        NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];

        NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
        [request setURL:[NSURL URLWithString:@"http://iphonewebserver.wsisites.net/Default.aspx"]];
        [request setHTTPMethod:@"POST"];
        [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
        [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
        [request setHTTPBody:postData];

NSURLResponse *response;
        NSError *error;
        NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
        NSLog(@"Succeeded! Received %d bytes of data",[urlData length]);
        NSString *outputdata = [[NSString alloc] initWithData:urlData encoding:NSASCIIStringEncoding];
        NSLog(@"%@", outputdata);
NSXMLParser *parser= [[NSXMLParser alloc]initWithData:urlData];

        parser.delegate=self;
        [parser parse];
        [parser release];

      if([self.status isEqualToString:@"success"]){
            viewController = [[FirstViewController alloc]initWithNibName:@"FirstViewController" bundle:nil];
            [self presentModalViewController:viewController animated:YES]; 
        }
        else {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Login Failed !!! " message:@"Please Enter Correct Username and Password" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
            [alert release];
            NSLog(@"%@",self.status);
        }
    }
    else{
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Login Failed !!! " message:@"Please Enter the Username and Password" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK",nil];
        [alert show];
        [alert release];

    }

}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if(buttonIndex == 0)
    { 
        [self onTapReset];
    }

}

- (void)viewDidLoad
{
    [super viewDidLoad];
    txtUserName.delegate = self;
    txtPassword.delegate = self;
    txtUserName.text = @"admin";
    txtPassword.text = @"pass";
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{

    currentElement = elementName;
    if([elementName isEqualToString:@"result"]) {
        NSLog(@"%@",currentElement);
    }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
    if([currentElement isEqualToString:@"login"]){
        self.status=[NSString stringWithFormat:@"%@",string];
        NSLog(@"%@",self.status);
    }
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

    currentElement=@"";//required to reset current element

}

@end

コードを楽しんで楽しんでください.... :))

于 2011-12-15T06:08:32.913 に答える