Only check content type when response has content.

This commit is contained in:
dstnbrkr 2011-10-21 10:43:28 -07:00
parent 67d8d043c9
commit 71a7a06649

View file

@ -23,6 +23,7 @@
#import "AFHTTPRequestOperation.h" #import "AFHTTPRequestOperation.h"
@interface AFHTTPRequestOperation () @interface AFHTTPRequestOperation ()
- (BOOL)hasContent;
@property (readwrite, nonatomic, retain) NSError *error; @property (readwrite, nonatomic, retain) NSError *error;
@end @end
@ -61,7 +62,7 @@
[userInfo setValue:[self.request URL] forKey:NSURLErrorFailingURLErrorKey]; [userInfo setValue:[self.request URL] forKey:NSURLErrorFailingURLErrorKey];
self.error = [[[NSError alloc] initWithDomain:AFNetworkingErrorDomain code:NSURLErrorBadServerResponse userInfo:userInfo] autorelease]; self.error = [[[NSError alloc] initWithDomain:AFNetworkingErrorDomain code:NSURLErrorBadServerResponse userInfo:userInfo] autorelease];
} else if (![self hasAcceptableContentType]) { } else if ([self hasContent] && ![self hasAcceptableContentType]) { // Don't invalidate content type if there is no content
NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
[userInfo setValue:[NSString stringWithFormat:NSLocalizedString(@"Expected content type %@, got %@", nil), self.acceptableContentTypes, [self.response MIMEType]] forKey:NSLocalizedDescriptionKey]; [userInfo setValue:[NSString stringWithFormat:NSLocalizedString(@"Expected content type %@, got %@", nil), self.acceptableContentTypes, [self.response MIMEType]] forKey:NSLocalizedDescriptionKey];
[userInfo setValue:[self.request URL] forKey:NSURLErrorFailingURLErrorKey]; [userInfo setValue:[self.request URL] forKey:NSURLErrorFailingURLErrorKey];
@ -73,15 +74,16 @@
return _HTTPError; return _HTTPError;
} }
- (BOOL)hasContent {
return [self.responseData length] > 0 && [self.response statusCode] != 204;
}
- (BOOL)hasAcceptableStatusCode { - (BOOL)hasAcceptableStatusCode {
return !self.acceptableStatusCodes || [self.acceptableStatusCodes containsIndex:[self.response statusCode]]; return !self.acceptableStatusCodes || [self.acceptableStatusCodes containsIndex:[self.response statusCode]];
} }
- (BOOL)hasAcceptableContentType { - (BOOL)hasAcceptableContentType {
// Don't invalidate content type if there is no content return !self.acceptableContentTypes || [self.acceptableContentTypes containsObject:[self.response MIMEType]];
BOOL hasNoContent = [self.responseData length] == 0 || [self.response statusCode] == 204;
return !self.acceptableContentTypes || [self.acceptableContentTypes containsObject:[self.response MIMEType]] || hasNoContent;
} }
#pragma mark - AFHTTPClientOperation #pragma mark - AFHTTPClientOperation