1

.aspx内部にいくつかの webmethods を含むファイルがあります。iOS (iPhone) アプリケーション内からこれらのメソッドを使用したいと考えています。webmethod コードは次のとおりです。

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

私が使用したこのWebメソッドをテストするには:

$.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"戻ってきたので、xcode 4.5.2 内から同じことをしたいので、新しい iPhone アプリを作成し、label(lbResult) とbutton(btDoLogin) を ViewController 内に配置し、アウトレットとアクションを割り当てました。 .

非同期やデリゲートには興味がないことに注意してください。データを元に戻し、それを解析できるようにしたいだけです(JSON)。

詳細について非常に具体的で申し訳ありませんが、同様の質問をたくさん見ましたが、どれもうまくいきませんでした。私が読んだことについては、これは NSURLConnection を使用して解決できることを理解しています。たとえば、Objective C で JSON Web サービスにパラメーターを渡すという質問は、私が必要としているものと非常に似ていますが、返されるのはページ全体です! (つまり、Web メソッドを呼び出すのではなく、ページ全体をダウンロードすることを意味します) また、2 つのパラメーターを渡す必要があり、質問は 1 つしか使用しません (連結された文字列でそれらを分離する方法がわかりません)。

では、この特定の Web メソッドに接続して戻り値を取得するには、IBAction 内で正確に何を行う必要があるのでしょうか。

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

ありがとう。-

4

1 に答える 1

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        
    }
}

これが他の誰かに役立つことを願っています

于 2012-11-26T05:45:15.227 に答える