使用带网关保护的 JSON Web 服务时 IOS 无响应

Posted

技术标签:

【中文标题】使用带网关保护的 JSON Web 服务时 IOS 无响应【英文标题】:No Response in IOS while using JSON Webservice with Gateway protection 【发布时间】:2014-03-14 06:03:59 【问题描述】:

下面的代码是简单的登录应用程序。我使用 Post 请求传递用户名和密码来获取详细信息。但我得到了来自网络服务的 @"" 响应。

email= emailTextField.text;
password=passwordTextfield.text;

NSString *post = [[NSString alloc] initWithFormat:@"UserName=%@&Password=%@",email,password];

NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];

NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];

NSURL *url = [NSURL URLWithString:@"http:Gateway/api/json"];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
[theRequest setHTTPMethod:@"POST"];
[theRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[theRequest setValue:postLength forHTTPHeaderField:@"Content-Length"];
[theRequest setHTTPBody:postData];
[theRequest setHTTPBody:postData];

NSURLResponse *response;// = [[NSURLResponse alloc] init];

NSError *error;// = [[NSError alloc] init;

NSData *urlData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error];

NSString *str=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];

NSLog(@"Login response: is %@",str);

【问题讨论】:

查看NSURLConnectionDelegate 提供身份验证的方法。 我应该调用哪种方法来传递用户名和密码凭据? NSLog(@"errot: %@",error); 这是错误 o get 操作无法完成。 (NSURLErrorDomain error -1012.)" UserInfo=0xa219390 NSErrorFailingURLKey=http://1, NSErrorFailingURLStringKey=http:///api/json/reply/Customer/?, NSUnderlyingError=0x8f3e3c0 "操作无法完成。 (kCFErrorDomainCFNetwork 错误 -1012.)" 【参考方案1】:

要向服务器提供身份验证凭据,请使用 NSURLConnection 委托

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 

    if ([challenge previousFailureCount] == 0) 

        NSURLCredential *credential;
        credential = [NSURLCredential credentialWithUser:userName password:password persistence:NSURLCredentialPersistenceNone];
        [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
     else 
        [[challenge sender] cancelAuthenticationChallenge:challenge];
    

【讨论】:

以上是关于使用带网关保护的 JSON Web 服务时 IOS 无响应的主要内容,如果未能解决你的问题,请参考以下文章

一文带你了解API网关!

保护REST API/Web服务的最佳实践

如何在 .NET WCF 中保护 HTTP JSON Web 服务

iOS 将 json 数据发布到 Web 服务并返回结果

12.Azure应用程序网关(下)

12.Azure应用程序网关(下)