Я использую VirtualPathProvider
, который в настоящее время отображает виртуальный путь к каталогу, внешнему по отношению к решению. Я строю это в основном для самоупражнений. Это полностью эквивалентно программной или жесткой ссылке NTFS в каталоге решения.
Во всяком случае, мне удалось успешно загрузить статические изображения из этого виртуального каталога с помощью моего собственного провайдера.
Теперь проблема в том, что браузер не кэширует изображения. И сервер даже не думает возвращать информацию о кеше (например, ETag).
Вот что я сделал:
GetFile(path).Open()
возвращаетFileStream
черезFile.Open()
- Я не переопределил
GetCacheKey
иGetCacheDependencies
- Я переопределил
GetFileHash
, возвращающий хэш Murmur (кажется, самый быстрый, даже чем CRC-32), и протестировал его. - Во время отладки
GetFileHash
никогда не вызывается в моем провайдере
CTRL-F5
ing возвращает только следующие заголовки (без ссылки на кеш)
Cache-Control private
Content-Length 476
Content-Type image/png
Date Sat, 29 Dec 2012 21:25:54 GMT
Server Microsoft-IIS/8.0
X-AspNet-Version 4.0.30319
X-Powered-By ASP.NET
X-SourceFiles [...]
В настоящее время я отлаживаю сервер отладки Visual Studio и Firefox, оснащенный Firebug.
В качестве примера вот что я ожидал (http://i.stack.imgur.com/3mn3d.png)
Accept-Ranges bytes
Cache-Control max-age=315360000
Content-Length 1059
Content-Type image/png
Date Sat, 29 Dec 2012 21:35:29 GMT
Etag "7d636a8ef932ed081c16ace6f87b16e6"
Expires Fri, 12 Feb 2038 09:58:39 GMT
Last-Modified Tue, 14 Feb 2012 22:07:18 GMT
Server ECAcc (fcn/4089)
X-Cache HIT
Вопрос очевиден: как заставить браузер не перезагружать эти статические ресурсы?