我正在使用 NSURLSession 进行 REST Web 服务调用。我在 NSURLSessionConfiguration.HTTPAdditionalHeaders 中设置了 Web 服务的内容类型。下面的代码在 iOS 7.0 到 iOS 8.1.3 中运行良好。但在 iOS 8.3 中,当在 HTTPAdditionalHeaders 中设置 content-Type 时,Web 服务响应数据将返回为零字节。
方法一:
NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] init];
NSData *postData = [dataToBeSent dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
[urlRequest setHTTPBody:postData];
[urlRequest setHTTPShouldHandleCookies:YES];
[urlRequest setURL:urlOfService];
[urlRequest setHTTPMethod:@"POST"];
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
sessionConfiguration.HTTPAdditionalHeaders = @{@"Content-Type" : @"application/json"};
NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
}];
如果我修改上面的代码以在 NSMutableURLRequest 中设置 content-Type,如下所示,我会从 iOS8.3 中的 webservice 接收数据。我不确定是什么导致了这个问题。我也没有看到有人报告这个问题。我只是想知道我调用 Web 服务的第一种方式是推荐的方式还是我在这里做错了什么?如果调用 Web 服务的第一种方法是错误的,为什么它应该适用于除 8.3 之外的所有其他 iOS 版本?
方法二:
NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc] init];
NSData *postData = [dataToBeSent dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
[urlRequest setHTTPBody:postData];
[urlRequest setHTTPShouldHandleCookies:YES];
[urlRequest setURL:urlOfService];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
}];