16

MVC アプリで標準の outputcache タグを使用していますが、これはうまく機能しますが、特定の時間に強制的にダンプする必要があります。どうすればこれを達成できますか? キャッシュされるページは、非常に単純なルート {Controller}/{PageName} から構築されているため、ほとんどのページは /Pages/About-Us のようなものです。

明確にするために、.aspx ビュー ページの上部にある出力キャッシュ タグを次に示します。

<@ OutputCache Duration="100" VaryByParam="None" %>

したがって、コンテンツが更新される同じコントローラーでの別のアクションでは、このキャッシュ、またはそのすべてをダンプする必要があります。これは非常に小さなアプリであるため、キャッシュされたすべてのアイテムをダンプすることは大したことではありません。

4

4 に答える 4

16

「なし」と「」の使用には注意してください。

この動作を検証するためにFiddlerを使用しました。

これは、ブラウザがサーバーに戻って最新バージョンをチェックするかどうかに影響を与えるようです(304が発生します)。少なくともChromeではそうです。Varies=""有効期限が切れる前にファイルを更新したくないことが確実にわかっている場合に使用します。

この投稿Varies=""で行ったように使用することをお勧めします。私のjavascriptファイルの場合、ブラウザが戻って、有効期限が切れるまで別のHttpリクエストを作成したくありません。304は不要です。

于 2009-01-28T01:05:52.950 に答える
15

HttpResponse.RemoveOutputCacheItem()おそらくあなたが使いたい方法です。アクションがキャッシュされている名前がわかれば、特定のアクションだけを削除できます (ブレークポイントを設定するか、キャッシュされたアイテムのすべての名前を画面にダンプしてみてください)。

それ以外の場合は、出力キャッシュ全体を反復処理して、すべての項目をクリアします。

于 2008-12-18T03:58:19.300 に答える
7

VaryByParam の "None" と "" の違いがわからないため、次の属性を使用していました。

[OutputCache(Location=OutputCacheLocation.ServerAndClient, Duration=int.MaxValue, VaryByParam="none")]

そして、このVary: *問題を「修正」するためのこのコード:

this.Response.Cache.SetOmitVaryStar(true);

ASP.NETキャッシングテストで参照されていることがわかったのは、VaryByParamのバグを見つけることです

「Client」と「ServerAndClient」に設定された OutputCache ディレクティブの違いは、「ServerAndClient」が Vary フィールドを出力することです。これは、IE がリクエストを送信しているという点で IE に影響を与えています。vary:* ヘッダーを使用すると、すべてのクライアント キャッシュを無効にすることができます ( http://msdn2.microsoft.com/en-us/library/system.web.httpcachepolicy.setomitvarystar.aspx )。

vary:* ヘッダーを削除してクライアント キャッシュを許可する唯一の方法は、次のコードを使用することでした。

于 2010-08-13T22:25:27.407 に答える
1

ループするとコレクションが空になるため、出力キャッシュは HttpContent.Cache に何も入れないようです。

For Each elem As DictionaryEntry In HttpContext.Cache
  HttpContext.Cache.Remove(elem.Key)
Next

ここに私のアクション属性があります:

<OutputCache(Duration:=600, VaryByParam:="pagename")> _
Function Index(ByVal pagename As String) As ActionResult
于 2008-12-18T04:19:55.730 に答える