坚持使用AFNetworking

时间:2015-12-13 04:00:06

标签: ios afnetworking

无法找到我的代码的真正问题。我对所有其他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,它的工作非常好。请提出建议,我做错了。

1 个答案:

答案 0 :(得分:0)

将Content-type设置为application / Json并尝试

[请求setValue:@" application / json" forHTTPHeaderField:@"内容类型"];