Я пытаюсь использовать AFNetworking 2.0 для выполнения своих сетевых запросов, но я сталкиваюсь с каким-то странным поведением. Я подклассифицировал AFHTTPSessionManager
как предложенный в документации, и предоставил метод класса, который возвращает объект singleton, который имеет базовый url, а также устанавливает мой заголовок auth.
+ (id)sharedInstance {
static dispatch_once_t once;
static MyHTTPClient *sharedInstance;
dispatch_once(&once, ^{
sharedInstance = [[self alloc] initWithBaseURL: NSURLURLWithString:kPlatformAPIBaseURL]];
});
//Uncommenting this line makes the error go away
//sharedInstance.responseSerializer = [AFJSONResponseSerializer serializer];
//get latest session id everytime someone gets an instance of the client
sharedInstance.sessionId = [MySessionManager getSessionId];
return sharedInstance;
}
- (instancetype)initWithBaseURL:(NSURL *)url {
self = [super initWithBaseURL:url];
if(self) {
self.sessionId = [FSSessionManager getSessionId];
self.serializer = [AFHTTPRequestSerializer serializer];
[_serializer setValue:_sessionId forHTTPHeaderField:kAuthorizationHeader];
[_serializer setValue:@"application/json" forHTTPHeaderField:kAcceptHeader];
self.requestSerializer = _serializer;
}
return self;
}
- (void)setSessionId:(NSString *)sessionId {
_sessionId = sessionId;
[self.serializer setValue:_sessionId forHTTPHeaderField:kAuthorizationHeader];
}
Мое приложение использует это, чтобы сделать запрос POST для аутентификации моего пользователя. Это отлично работает. Затем я делаю запрос GET для извлечения списка объектов. Также отлично работает. Затем я делаю тот же запрос GET, и я возвращаю сетевую ошибку Error Domain=AFNetworkingErrorDomain Code=-1016 "Request failed: unacceptable content-type: application/json"
Это тот же самый запрос GET, но он не срабатывает при втором вызове. Когда я раскомментирую строку sharedInstance.responseSerializer
, поэтому я создаю новый экземпляр сериализатора ответа каждый раз, когда получаю ссылку на мой общий экземпляр, тогда я больше не получаю эту ошибку.
Невозможно ли использовать многократный ответ responseSerializer? Похоже, какое-то государство висит вокруг запросов. Какой правильный способ настроить это?