从iOS调用ASP.NET web方法并解析JSON
从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! }
谢谢。-
问题的出现原因是在将参数传递给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对象,并进行其他操作。
希望这对其他人有所帮助。