AFNetworking 3.0 GET/POST устанавливает acceptContentTypes и очищает кеш для изображений

Я использую AFNetworking в своем проекте в качестве сетевого уровня. Для изображений у меня были некоторые проблемы, связанные с кэшированием, и я обновил фреймворк до версии 3.0.

В процессе обновления у меня возникают проблемы с запросами на получение медиаконтента (изображений и видео).

Это мой класс:

+ (void)requestWithMethod:(NSString*)methodTypeValue path:(NSString*)pathValue parameters:(NSDictionary *)params token:(NSString*)token debug:(BOOL)debug completionHandler:(void (^)(id result, NSError *error))block {
    if(debug){
        NSLog(@"Method Type  = %@ \n",methodTypeValue);
        NSLog(@"Link = %@ \n",pathValue);
        NSLog(@"Token = %@", token);
    }

    NSString *linkRequest = [NSString stringWithFormat:@"%@%@",GatewayRoot,pathValue];
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

    NSMutableURLRequest *req = [[AFJSONRequestSerializer serializer] requestWithMethod:methodTypeValue URLString:linkRequest parameters:nil error:nil];

    [req setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    if (token) {
       [req setValue:token forHTTPHeaderField:@"AccessToken"];
    }

    [[manager dataTaskWithRequest:req completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
        if (!error) {
                if (debug) {
                    NSLog(@"response:\n %@ \n",responseObject);
                }
            block(responseObject,nil);
        } else {
            NSLog(@"Error: %@, %@, %@", error, response, responseObject);
            block(nil, error);
        }
    }] resume];
}

Я сделал тест, и все в порядке с обычными запросами. Мне нужно получить некоторые изображения и видео с сервера, и я получаю эту ошибку:

NSLocalizedDescription=Ошибка запроса: неприемлемый тип контента: изображение/png NSLocalizedDescription=Ошибка запроса: неприемлемый тип контента: видео/mp4

Я попытался установить типы контента следующим образом:

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"image/jpeg",@"video/mpeg",...nil];

manager.responseSerializer.acceptableContentTypes =[manager.responseSerializer.acceptableContentTypes setByAddingObject:@"image/jpeg",@"video/mpeg",...nil];
  1. Пожалуйста, не могли бы вы помочь мне установить допустимые типы контента?

  2. У меня есть другая проблема, связанная с кэшированием изображений: в старой версии я вошел в систему и получил изображение профиля пользователя, а после того, как я вышел из системы и снова вошел в систему с другими учетными данными, я получил то же изображение для профиля пользователя (я обнаружил, что это проблема, связанная с Кэширование изображений AFNetworking).

Можете ли вы помочь мне с потоком запросов на очистку кеша?

Большое спасибо за вашу помощь!


person Tyrone Prude    schedule 16.04.2016    source источник
comment
Независимо от вашего вопроса, если вы используете AFJSONRequestSerializer, я не думаю, что вам нужно устанавливать Content-Type самостоятельно. Я считаю, что AFNetworking сделает это за вас.   -  person Rob    schedule 16.04.2016


Ответы (1)


Вместо того, чтобы самостоятельно устанавливать допустимые типы контента, вы, вероятно, просто захотите указать соответствующий responseSerializer. Например, если вы хотите UIImage, вы можете сделать:

manager.responseSerializer = [AFImageResponseSerializer serializer];

Если вы хотите NSData, вы можете сделать:

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

Если вы не хотите, чтобы ваш запрос кэшировался, вы должны установить req.cachePolicy в NSURLRequestReloadIgnoringCacheData или реализовать AFURLSessionManager блок ответа кеша, setDataTaskWillCacheResponseBlock. Или, конечно, вы можете изменить свой сервер, чтобы те ресурсы, которые не должны кэшироваться, имели соответствующие поля заголовков.

person Rob    schedule 16.04.2016
comment
Большое спасибо за вашу помощь! Я внес изменения, и теперь все в порядке. - person Tyrone Prude; 16.04.2016