29

デフォルトでは、MVC バンドルはクライアントに 1 年間キャッシュされます。クライアント ヘッダーを手動で設定することは可能ですか (1 つの特定のバンドルに対して)?

必要なのは、バンドルの 1 つにカスタムの期限切れヘッダーを設定することです。このバンドルは外部 Web サイト用であり、変更するたびにバンドルを指す URL を変更しないため、「v=hash」クエリ文字列に頼ることはできません。

私が試したのは、カスタム Bundle クラスを作成し (Bundle を継承)、GenerateBundleResponse() メソッドをオーバーライドすることです。この方法でサーバーのキャッシュを制御できますが、クライアントのキャッシュをカスタマイズする唯一の方法は、BundleResponse.Cacheability (public、private、nocache など) を設定することです。しかし、ヘッダーを手動で設定することはできません。BundleContext (および HttpContext) にアクセスできますが、そのコンテキストにヘッダーを設定すると、他のすべての要求にも影響します。

4

6 に答える 6

4

ASP.NET MVC バンドル機能の既定の動作は、バンドルを構成するファイルのいずれかが変更された場合、そのバンドルのクエリ文字列が自動的に変更されるというものです。ビューのコードで次を使用していると仮定します。

@Scripts.Render("bundle name")

つまり、バンドル内に新しいバージョンのファイルがある場合、そのバンドルを使用するビューを次にページがレンダリングするときに、クライアント ブラウザがキャッシュ内で見つけられないスクリプト タグが送信されます (クエリ文字列が異なります)。

したがって、これで問題が解決するようです-あなたが何を意味するかによって異なります:

そして、バンドルを変更するたびに、バンドルを指す URL を変更しません。

于 2013-02-28T02:13:15.270 に答える
3

私にとってうまくいくように見えるのは、バンドル構成でバンドルにバージョン番号を付けてから、マークアップで新しいバージョンを参照することです。

于 2016-07-22T12:35:32.677 に答える
0

追加のクエリ文字列パラメーターを URL に渡し、キャッシュを更新するたびに変更します。

例: https://www.google.co.in/?gfe_rd=cr&ei=EwJeVbHWLcX08wfgwoCoBA&gws_rd=ssl&custom=abc

最後のパラメーターはカスタムです。

于 2015-05-21T16:07:35.077 に答える