I\'m using AFHTTPRequestOperationManager
for a POST
request. Now I\'m deliberately entering incorrect information to handle a 400
erro
Looking at the code for - responseObject
, it appears that an HTTP error prevents it from being populated. You can grab the responseData
directly and parse it yourself, but I would say this is either a bug or a good enhancement request. (It looks like - responseObject
probably should be checking self.responseSerializationError
, not self.error
, when deciding if it should try to build a response object.)
I also faced same problem in AFNetworking, as instead of using
- (NSURLSessionDataTask *)POST:(NSString *)URLString
parameters:(id)parameters
progress:(void (^)(NSProgress * _Nonnull))uploadProgress
success:(void (^)(NSURLSessionDataTask * _Nonnull, id _Nullable))success
failure:(void (^)(NSURLSessionDataTask * _Nullable, NSError * _Nonnull))failure
Please try to use that one :-
- (NSURLSessionDataTask *)POST:(NSString *)URLString
parameters:(id)parameters
constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block
progress:(nullable void (^)(NSProgress * _Nonnull))uploadProgress
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
thanks,
You can do either of these solutions
1) Set the acceptableStatusCodes
to accept your 400 statusCode, and you handle in the success block
manager.responseSerializer.acceptableStatusCodes = [NSIndexSet indexSetWithIndex:400];
2) Create a custom ResponseSerializer, like this JSONResponseSerializerWithData, to insert the responseObject into the NSError userInfo, and handle in the failure block
Pro tip: AFNetworking is opensource, just take a look at AFHTTPRequestOperation for methods
setCompletionBlockWithSuccess:failure:
responseObject
error
Following code worded for me:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
[manager.requestSerializer setValue:@"parse-application-id-removed" forHTTPHeaderField:@"X-Parse-Application-Id"];
[manager.requestSerializer setValue:@"parse-rest-api-key-removed" forHTTPHeaderField:@"X-Parse-REST-API-Key"];
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
manager.securityPolicy.allowInvalidCertificates = YES;
NSString *URLString = [NSString stringWithFormat:@"%@/%@", BASE_URL,methodName];
[manager POST:URLString parameters:requestDict success:^(AFHTTPRequestOperation *operation, id responseObject)
{
NSLog(@"JSON: %@", responseObject);
[myDelegate StopIndicator];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
[myDelegate StopIndicator];
}];