0

「リスト」と呼ばれるコントローラー/アクションがあります。このメソッドには with 属性が組み込まれています

[OutputCache(期間 = 3600、VaryByParam = "*")]

このアクションには 3600 秒のキャッシュがあります。これは、データベースからデータをロードし、1 時間ごとに (多かれ少なかれ) 変更されるためです。

私のマスターレイアウト(私のマスターページ)は、認証されたユーザーの場合はヘッダートップバーにUserNameを表示するか、ユーザーが認証されていない場合は静的テキストUserを表示するため、Layout.cshtml に問題があります。以下のコードを参照してください。

@Html.Raw(WebSecurity.IsAuthenticated ? WebSecurity.CurrentUserName : "ユーザー")

誰かが認証されると、ページ上の最初のアクセスの名前がキャッシュされ、すべてのユーザーが認証されているかどうかにかかわらず、最初に認証されたユーザーのユーザー名がヘッダーの上部バーに表示されます。これは非常に悪いです!

指定された Controller/Action からのデータのみを使用して、layout.cshtml キャッシュは行われないと思いました。

どうすれば修正できますか?

私にとって非常に重要なので、OutputCache を削除するのは好きではありません。ヘッダートップバーは、レイアウトページが組み込まれているため、すべてのユーザーに共通です。

4

1 に答える 1

1

あなたが達成しようとしているのは、セクションを除くすべてのページをキャッシュするドーナツキャッシングだと思います。MVC がこれをサポートしているかどうかはわかりません (MVC 3 - いいえ)。役立つオープン ソースのDevTrends.MvcDonutCachingがあります。

于 2012-09-13T16:15:20.267 に答える