我正在尝试调用使用ASP.NET开发的Web服务。目的是将用户名和密码传递给Web服务以模拟登录过程。
为了调用服务,我使用了以下方法:
NSError *errorReturned = nil;
NSString *urlString = @"http:myDomain/myMethod?Operation=SignIn";
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:@"test" forKey:@"userName"];
[dict setObject:@"test" 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)
{
NSLog(@"%@", errorReturned);
}
else
{
NSString *retVal = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@", retVal);
}
运行应用程序并单击触发上述方法的UIButton后,控制台窗口中不会显示任何内容。
服务以JSON格式返回响应。
我想知道我是否遗漏了一些东西,因为我既没有收到错误也没有成功登录?
任何帮助将不胜感激!
谢谢。
花岗岩
答案 0 :(得分:1)
有几点想法:
如果调用此方法,即使retVal
为空且您的
NSLog(@"%@", retVal);
刚刚记录了应用名称和时间戳。也许将NSLog
更改为
NSLog(@"retVal = %@", retVal);
消除任何歧义。或者在代码中加入断点并单步执行它以查看应用程序采用的路径。
您对服务器界面有信心吗?例如,Operation
的{{1}}值是否可能属于JSON请求本身?此外,某些服务区分大小写,因此您可能也想检查它。
我不知道您对服务器有什么访问权限,但是检查日志以确保收到请求是值得的,可能会在代码中临时添加一些日志记录,这样您就可以确认参数都是收到得当。或者,如果没有别的,请确保服务器正确记录/报告任何错误。
顺便说一句,您SignIn
的实例化是不必要的,应该只是
theResponse
NSURLResponse *theResponse = nil;
调用不会填充现有sendSynchronousRequest
实例,而是创建新实例并更新NSURLResponse
以指向它。
您应首先修复您的请求,但您可能希望至少将其更改为使用theResponse
而不是sendAsynchronousRequest
。你永远不应该在主线程上进行同步调用。
答案 1 :(得分:0)
我通过使用ASIHHTPRequest解决了我的问题。此外,我检查了服务器界面,结果发现必须使用URL发送参数。
-(void)signInAction:(id)sender{
NSURL *url = [NSURL URLWithString:@"http://mydomaain.com/UserService/SignIn/test/test"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDidFinishSelector:@selector(requestCompleted:)];
[request setDidFailSelector:@selector(requestError:)];
[request setDelegate:self];
[request setRequestMethod:@"GET"];
[request startAsynchronous];
}
- (void)requestCompleted:(ASIHTTPRequest *)request
{
NSString *responseString = [request responseString];
//[responseString UTF8String];
NSLog(@"ResponseString:%s",[responseString UTF8String]);
}
- (void)requestError:(ASIHTTPRequest *)request
{
NSError *error = [request error];
NSLog(@"Error:%@",[error description]);
}