从iOS调用ASP.NET web方法并解析JSON

10 浏览
0 Comments

从iOS调用ASP.NET web方法并解析JSON

我有一个包含一些Web方法的.aspx文件。我想要从iOS(iPhone)应用程序内部调用这些方法。

Web方法的代码如下所示:

[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应用程序,在ViewController内部放置了一个label(lbResult)和一个button(btDoLogin),并分配了outlet和action。

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

对于细节我很抱歉,但我看到了很多类似的问题,没有一个答案对我有用。根据我的理解,可以使用NSURLConnection解决这个问题。例如,这个问题Passing parameters to a JSON web service in Objective C与我所需的非常相似,但我得到的返回值是整个页面!(意思是它下载整个页面而不是调用Web方法)而且,我需要传递2个参数,而该问题仅使用1个(我不明白如何在连接字符串中分隔它们)。

现在,我需要在IBAction中添加什么代码来连接到这个特定的Web方法并获取返回值?

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

谢谢。-

0
0 Comments

问题的出现原因是在将参数传递给ASP.NET web method时,参数以JSON格式传递而不是普通的连接字符串。解决方法是使用NSJSONSerialization将参数转换为JSON格式,并将其作为HTTP请求的正文发送到web method。

首先,我们需要定义一个NSURL对象,表示web method的URL。然后,创建一个NSMutableURLRequest对象,并将URL设置为请求的目标。接下来,将HTTP方法设置为POST,并设置Content-Type标头为application/json,指示请求正文是JSON格式。

然后,创建一个NSMutableDictionary对象,用于存储需要传递给web method的参数。在这个例子中,我们将username和password作为参数传递。然后,使用NSJSONSerialization将参数字典转换为NSData对象。

接下来,我们需要设置Content-Length标头,指示请求正文的长度。然后,将请求正文设置为转换后的JSON数据。

然后,我们使用NSURLConnection的sendSynchronousRequest方法发送请求,并将返回的数据保存在NSData对象中。如果有错误发生,我们可以处理错误。否则,我们可以将返回的数据解析为NSString对象,并进行其他操作。

希望这对其他人有所帮助。

0