У меня есть пользовательский обработчик, который возвращает изображение в браузер.
Изображения извлекаются из базы данных.
По какой-то причине изображения не кэшируются браузером, и мне было интересно, сможет ли кто-нибудь определить, что мне не хватает, из приведенного ниже кода:
HttpContext.Current.Response.BinaryWrite(imageBytes);
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public);
Context.Current.Response.Cache.SetAllowResponseInBrowserHistory(true);
if(imgRepGetCache.DateCached.HasValue)
HttpContext.Current.Response.Cache.SetLastModified(imgRepGetCache.DateCached.Value);
HttpContext.Current.Response.Cache.SetExpires(DateTime.Now.AddDays(2));
HttpContext.Current.Response.ContentType = "image/jpeg";
Или, в качестве альтернативы, если я как-то упускаю суть, и мне нужно поискать где-то еще.
Редактировать: Согласно запросу для получения дополнительной информации:
- URL-адрес всегда один и тот же
- Я тестирую загрузку одного и того же файла через стандартный канал IIS и мой канал в одном браузере на одном компьютере. Тот, который загружается через IIS, обычно кэшируется, мой файл - нет.
Редактировать 2: После проверки запросов / ответов HTTP на обычном маршруте IIS я думаю, что это как-то связано с ETag. ETag (который я новичок на данный момент), кажется, своего рода контрольная сумма для документа. При последующих запросах от браузера ETag отправляется, и если сервер обнаруживает, что ETag не изменился, он возвращает 304 - Not Modified. Все хорошо! Но сейчас я устанавливаю ETag, используя:
HttpContext.Current.Response.Cache.SetETag(imgRepGetCache.DateCached.ToString());
Но оно не появляется в ответе. Ближе ...
Редактировать 3: Я исправил это в конце после использования Firebug для некоторой забавы по проверке HTTP. Я разместил свое решение ниже.