1

我有一个.aspx文件,里面有一些网络方法。我想从 iOS (iPhone) 应用程序中使用这些方法。web方法代码如下:

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

为了测试这个网络方法,我使用了:

$.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 应用程序,并在 ViewController 中放置一个label(lbResult) 和一个button(btDoLogin) 并分配出口和动作.

请注意,我对异步或委托不感兴趣,我只想返回数据并能够解析它(JSON)。

很抱歉对细节如此具体,但我看到了很多类似的问题,但没有一个答案对我有用。对于我所读到的内容,我的理解是可以使用 NSURLConnection 来解决这个问题。例如这个问题Passing parameters to a JSON web service in Objective C和我需要的非常相似,但是我得到的是整个页面!(意味着它正在下载整个页面而不是调用 web 方法)另外,我需要传递 2 个参数并且问题只使用 1(我不明白如何在连接的字符串中将它们分开)。

现在,我究竟需要在 IBAction 内部做什么才能连接到这个特定的 webmethod 并获取返回值?

- (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 回答