У меня проблема с кэшированием изображений, возвращаемых HttpResponseMessage.
Доступ к файлам осуществляется по URL-адресам:
http://localhost:[service port]/[file GUID]?Adapter=[adapter type]
например:
http://localhost:59292/b9e7d18a-2eaf-11e4-92e3-8056f2d1ef7b?Adapter=CoolAdapter
Я добавляю заголовки CacheControl в HttpResponseMessage:
new CacheControlHeaderValue()
{
Public = true,
MaxAge = TimeSpan.FromSeconds(60)
};
Оба заголовка управления кешем ответа корректно отображаются в браузере (Chrome), но при каждом обновлении этого URL-кода выполняется метод получения изображения на сервере вместо того, чтобы показывать это изображение из кеша.
Я что-то упустил (конфигурация IIS, форма url)?
Вы хотите добавить изображение в кеш IIS и задаться вопросом, почему он загружается несколько раз? Кэш IIS полезен, если у вас несколько клиентов, которым нужен один и тот же ресурс.
Вы можете проверить свой текущий кеш с помощью командной строки:
netsh http show cachestate
Скорее всего, вы хотите использовать кеш браузера - тот же самый клиент запрашивает один и тот же файл снова и снова за короткий промежуток времени. Следующие браузеры должны кэшировать ваши изображения:
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="1.00:00:00" />
</staticContent>
<httpProtocol>
<customHeaders>
<add name="Cache-Control" value="public" />
</customHeaders>
</httpProtocol>
Для этого я использую следующий код:
var age = new TimeSpan(cacheTime, 0, 0);
response.Headers.CacheControl = new CacheControlHeaderValue()
{
MaxAge = age,
Public = false,
NoCache = false,
Private = true,
};
response.Content.Headers.Expires = DateTime.UtcNow.Add(age);
Не уверен, что трюк - это часть Expires, или тот факт, что я использую 24 часа в качестве времени кеша.