VirtualPathProvider
現在、仮想パスをソリューションの外部のディレクトリにマップするを使用しています。主に自主練習用に作っています。これは、ソリューションのディレクトリにソフト リンクまたは NTFS ハード リンクを設定することとまったく同じです。
とにかく、カスタム プロバイダーを使用して、その仮想ディレクトリから静的イメージを正常に読み込むことができました。
問題は、ブラウザが画像をキャッシュしないことです。また、サーバーはキャッシュ情報 (ETag など) を返すことさえ考えていません。
これが私がやったことです:
GetFile(path).Open()
FileStream
経由で戻りますFile.Open()
- 私はオーバーライドしませんでした
GetCacheKey
GetCacheDependencies
- 私はMurmurハッシュを返すことをオーバーライドし
GetFileHash
(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 のデバッグ サーバーと Firebug を搭載した Firefox でデバッグしています。
例として、これが私が期待したものです(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
質問は明らかです:これらの静的リソースをブラウザーにリロードさせないようにするにはどうすればよいですか?