diff --git a/AVOS/Sources/Foundation/Request/LCPaasClient.h b/AVOS/Sources/Foundation/Request/LCPaasClient.h index 0e049b88..00178dbb 100644 --- a/AVOS/Sources/Foundation/Request/LCPaasClient.h +++ b/AVOS/Sources/Foundation/Request/LCPaasClient.h @@ -122,6 +122,17 @@ FOUNDATION_EXPORT NSString * const LCHeaderFieldNameProduction; failure:(void (^)(NSHTTPURLResponse *response, id responseObject, NSError *error))failureBlock; - (void)performRequest:(NSURLRequest *)request + validator:(BOOL (^)(NSHTTPURLResponse *response, id responseObject))validator + success:(void (^)(NSHTTPURLResponse *response, id responseObject))successBlock + failure:(void (^)(NSHTTPURLResponse *response, id responseObject, NSError *error))failureBlock; + +- (void)performRequest:(NSURLRequest *)request + success:(void (^)(NSHTTPURLResponse *response, id responseObject))successBlock + failure:(void (^)(NSHTTPURLResponse *response, id responseObject, NSError *error))failureBlock + wait:(BOOL)wait; + +- (void)performRequest:(NSURLRequest *)request + validator:(BOOL (^)(NSHTTPURLResponse *response, id responseObject))validator success:(void (^)(NSHTTPURLResponse *response, id responseObject))successBlock failure:(void (^)(NSHTTPURLResponse *response, id responseObject, NSError *error))failureBlock wait:(BOOL)wait; diff --git a/AVOS/Sources/Foundation/Request/LCPaasClient.m b/AVOS/Sources/Foundation/Request/LCPaasClient.m index 4ae90f34..0c10c90c 100644 --- a/AVOS/Sources/Foundation/Request/LCPaasClient.m +++ b/AVOS/Sources/Foundation/Request/LCPaasClient.m @@ -541,12 +541,37 @@ - (void)performRequest:(NSURLRequest *)request failure:(void (^)(NSHTTPURLResponse *response, id responseObject, NSError *error))failureBlock { [self performRequest:request + validator:nil + success:successBlock + failure:failureBlock]; +} + +- (void)performRequest:(NSURLRequest *)request + validator:(BOOL (^)(NSHTTPURLResponse *, id))validator + success:(void (^)(NSHTTPURLResponse *, id))successBlock + failure:(void (^)(NSHTTPURLResponse *, id, NSError *))failureBlock +{ + [self performRequest:request + validator:validator success:successBlock failure:failureBlock wait:NO]; } - (void)performRequest:(NSURLRequest *)request + success:(void (^)(NSHTTPURLResponse *, id))successBlock + failure:(void (^)(NSHTTPURLResponse *, id, NSError *))failureBlock + wait:(BOOL)wait +{ + [self performRequest:request + validator:nil + success:successBlock + failure:failureBlock + wait:wait]; +} + +- (void)performRequest:(NSURLRequest *)request + validator:(BOOL (^)(NSHTTPURLResponse *, id))validator success:(void (^)(NSHTTPURLResponse *response, id responseObject))successBlock failure:(void (^)(NSHTTPURLResponse *response, id responseObject, NSError *error))failureBlock wait:(BOOL)wait @@ -593,8 +618,17 @@ - (void)performRequest:(NSURLRequest *)request } else { NSTimeInterval costTime = -([operationEnqueueDate timeIntervalSinceNow] * 1000); LCLoggerDebug(LCLoggerDomainNetwork, LC_REST_RESPONSE_LOG_FORMAT, path, costTime, responseObject); - if (successBlock) { - successBlock(HTTPResponse, responseObject); + if (validator && !validator(HTTPResponse, responseObject)) { + if (failureBlock) { + NSError *err = LCError(LCErrorInternalErrorCodeMalformedData, + @"Malformed response data.", + @{ @"responseObject" : responseObject ?: NSNull.null }); + failureBlock(HTTPResponse, responseObject, err); + } + } else { + if (successBlock) { + successBlock(HTTPResponse, responseObject); + } } } if (wait) {