2012-11-26 7 views
1

.aspx 파일이 있으며 일부 웹 메소드가 있습니다. iOS (iPhone) 응용 프로그램 내부에서 이러한 메서드를 사용하고 싶습니다. 지금은 엑스 코드 4.5 내부에서 동일한 작업을 수행 할iOS 및 JSON에서 ASP.NET webmethod를 호출하십시오.

$.ajax({ 
    type: "POST", 
    url: "DataProvider.aspx/Login", 
    data: JSON.stringify({ username: "myUserName", password: "myPassword" }), 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (result) { alert(result.d); }, 
    error: function (xhr, ajaxOptions, thrownError) { 
     alert(xhr.status); 
     alert(thrownError); 
    } 
}); 

그래서 모든 체크 아웃 내가 다시 "myUserName:myPassword"을 얻을 :

[WebMethod] 
public static string Login(string username, string password) 
{ 
    return username + ":" + password; 
} 

내가 사용이의 WebMethod를 테스트하려면 다음과 같이 의 WebMethod 코드는 .2 그래서 새로운 아이폰 앱을 만들었고 label (lbResult)와 button (btDoLogin)을 ViewController 안에 넣고 콘센트와 액션을 할당했다.

비동기 또는 대리자에 관심이 없습니다. 데이터를 다시 구문 분석 할 수 있어야합니다 (JSON).

세부 사항에 관해서는 너무 구체적이지만 미안하지만 비슷한 질문이 많았습니다. 아무 대답도 나에게 도움이되지 못했습니다. 내가 읽은 것을 NSURLConnection을 사용하여 해결할 수 있다는 것을 이해하고있다. 예를 들어,이 질문 Passing parameters to a JSON web service in Objective C은 내가 필요로하는 것과 매우 비슷하지만, 내가 얻은 것은 전체 페이지입니다! (즉, 웹 메서드를 호출하는 대신 전체 페이지를 다운로드한다는 의미입니다.) 또한 매개 변수 2 개를 전달해야하며 질문에는 단 1 개만 사용됩니다 (연결 문자열에서 이들을 분리하는 방법을 이해하지 못합니다).

이제 특정 웹 메서드에 연결하고 반환 값을 얻으려면 정확히 무엇을 사용해야합니까?

- (IBAction)btDoLogin:(id)sender { 
    // magic code goes here! 
} 

고마워요

답변

4

그것은 문제가되지 정상적인 연결된 문자열로, how to pass the parameters in a JSON format 것을 밝혀졌습니다. 이 다른 사람

도움이

- (IBAction)btSend:(id)sender { 
    NSError *errorReturned = nil; 
    NSString *urlString = @"http://192.168.1.180:8080/DataProvider.aspx/DoLogin"; 
    NSURL *url = [NSURL URLWithString:urlString]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
    [request setHTTPMethod: @"POST"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 
    [dict setObject:@"myUsername" forKey:@"username"]; 
    [dict setObject:@"myPassword" forKey:@"password"]; 
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:kNilOptions  error:&errorReturned]; 
    [request setValue:[NSString stringWithFormat:@"%d", [jsonData length]] forHTTPHeaderField:@"Content-Length"]; 
    [request setHTTPBody: jsonData]; 

    NSURLResponse *theResponse =[[NSURLResponse alloc]init]; 
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&theResponse error:&errorReturned]; 
    if (errorReturned) 
    { 
     //...handle the error 
    } 
    else 
    { 
     NSString *retVal = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
     NSLog(@"%@", retVal); 
     //...do something with the returned value   
    } 
} 

희망 : 여기에 전체 코드는

관련 문제