无法找到我的代码的真正问题。我对所有其他API使用相同的代码,一切正常但一个API给出了问题。
NSString *strUrl = [[NSString stringWithFormat:@"%@%@",baseURL,apiURL] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:strUrl] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30.0];
//request type may be "POST" or "GET"
[request setHTTPMethod:requestType];
[request setValue:secretKey forHTTPHeaderField:key];
//contentType may be "application/json" or "text/html"
[request setValue:contentType forHTTPHeaderField:@"Accept"];
[request setValue:contentType forHTTPHeaderField:@"Content-Type"];
AFHTTPRequestOperation *requestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
requestOperation.responseSerializer = [AFJSONResponseSerializer serializer];
[requestOperation setShouldExecuteAsBackgroundTaskWithExpirationHandler:^{
completion(nil);
}];
[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {
completion(nil);
} failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) {
completion(nil);
}];
此代码适用于除一个以外的所有API。它在错误块中给我这个错误。
Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable content-type: text/html"
然后,我尝试通过这样做添加可接受的内容类型。
requestOperation.responseSerializer.acceptableContentTypes = [requestOperation.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
这不起作用。然后我将响应序列化程序更改为AFHTTPResponseSerializer并删除了可接受的内容类型行。然后响应来自NSData,我为所有其他API解析了对JSON对象的NSData响应。但是这个API在更改响应序列化程序后会出现此错误。这是错误块的错误。
JSON text did not start with array or object and option to allow fragments not set.
我不明白为什么会发生这种情况。我试图将标题可接受的内容类型更改为json和html。但那些没有任何区别。我在Chrome Postman中尝试了API,它的工作非常好。请提出建议,我做错了。
答案 0 :(得分:0)
将Content-type设置为application / Json并尝试
[请求setValue:@" application / json" forHTTPHeaderField:@"内容类型"];