【问题标题】:iOS post json data to web service and return resultiOS 将 json 数据发布到 Web 服务并返回结果
【发布时间】:2014-07-14 07:55:18
【问题描述】:

我有 WCF Web 服务,它接受电子邮件地址,如果数据库中不存在该条目,则返回“True”,如果存在,则返回“False”。当我使用 fiddler 和 POST 数据进行服务时,它返回结果为预期,当我尝试从我的 iPad 应用程序发送请求时,它只会说“无效的 JSON 原语:电子邮件。”。

服务链接: http://www.unluapps.com/Service1.svc/CheckRejected

用于测试的 JSON:

{"Email":"test@unluco.com"}

IOS代码:

 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
   NSError *e = nil;
   NSDictionary *parameters = [NSJSONSerialization JSONObjectWithData: [[NSString stringWithFormat:@"{\"Email\":\"%@\"}",_TxtMail.text]  dataUsingEncoding:NSUTF8StringEncoding]
        options: NSJSONReadingMutableContainers
        error: &e
    ];

   [manager POST:@"http://www.unluapps.com/Service1.svc/CheckRejected" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
       // NSLog(@"JSON: %@", responseObject);

        _receivedData=responseObject;
        //NSLog(@"%@",[responseObject objectForKey:@"CheckifExistsResult"]);
        NSLog(@"%@",[responseObject objectForKey:@"CheckRejectedResult"]);
    }
    failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }
    ]; 

【问题讨论】:

标签: c# ios json wcf afnetworking


【解决方案1】:

AFHTTPRequestOperationManager 默认使用 AFHTTPRequestSerializer。添加

manager.requestSerializer = [AFJSONRequestSerializer new];

AFHTTPRequestOperationManager 初始化之后。

您还可以简化代码:

   AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
   manager.requestSerializer = [AFJSONRequestSerializer new];
   NSDictionary *parameters = @{@"Email": _TxtMail.text};

   [manager POST:@"http://www.unluapps.com/Service1.svc/CheckRejected" parameters:parameters   success:^(AFHTTPRequestOperation *operation, id responseObject) {
       // NSLog(@"JSON: %@", responseObject);

        _receivedData=responseObject;
        //NSLog(@"%@",[responseObject objectForKey:@"CheckifExistsResult"]);
        NSLog(@"%@",[responseObject objectForKey:@"CheckRejectedResult"]);
    }
    failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }
    ]; 

【讨论】:

  • 状态码: 400, headers { "Cache-Control" = private; “内容长度”= 11; “内容类型”=“文本/html”;日期 = "2014 年 7 月 14 日星期一 08:55:45 GMT";服务器 = "Microsoft-IIS/8.0"; “X-AspNet-版本”=“4.0.30319”; "X-Powered-By" = "ASP.NET"; } }, NSErrorFailingURLKey=unluapps.com/Service1.svc/CheckRejected, NSLocalizedDescription=请求失败:错误请求 (400)}
  • 如何将内容类型设置为文本 html
  • 感谢您的帮助,我找到了解决方案。
【解决方案2】:

希望这篇文章对你有帮助

您使用的是 AFHTTPRequestOperation 而不是 AFJSONRequestOperation。

你也可以直接使用AFHttpClient:

NSDictionary *parameter = @{@"Email":self.email.text};
[httpClient setParameterEncoding:AFJSONParameterEncoding];
[httpClient registerHTTPOperationClass:[AFJSONRequestOperation class]];

[httpClient postPath:@"http://www.unluapps.com/Service1.svc/CheckRejected" parameters:parameter success:^(AFHTTPRequestOperation *operation, id responseObject) {
    // Print the response body in text
    BOOL *success = [[responseObject objectForKey:@"success"] boolValue];
    NSLog(@"Response: %@",responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    [self handleConnectionError:error];
}];

我还建议使用 clientWithBaseURL: 方法创建一个仅创建一个 AFHTTPClient 实例。 另请阅读github.com/AFNetworking/AFNetworking 上的文档,它确实解释了如何正确使用 AFHTTPClient。看看 AFAppDotNetAPIClient 这将为您提供如何使用 AFHTTPClient 的一个很好的示例。

【讨论】:

  • 构建失败:未知类型名称'AFJSONRequestOperation'
  • 查看此链接github.com/AFNetworking/AFNetworking 它将帮助您从 1.0 更改为 2.0
  • 感谢您的帮助,我找到了解决方案。
【解决方案3】:

在我花了几个小时编写代码后,我找到了另一种方法,并且 Web 服务的链接区分大小写。我已经更改了代码,现在它可以工作了。如果您在服务器端使用微软产品,请注意不要犯我犯的错误。

代码:

 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    [manager POST:@"http://www.unluapps.com/Service1.svc/checkRejected"
       parameters:@{@"email": _TxtMail.text}
          success:^(AFHTTPRequestOperation *operation, id responseObject) {
           NSLog(@"%@",[responseObject objectForKey:@"CheckRejectedResult"]);

          } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
              NSLog(@"Error: %@", error);
    }];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    相关资源
    最近更新 更多