Sitefinity で有効化された .NETs 出力キャッシュを使用する複雑な Web サイトがあります。最近、特定のユーザー コントロールに、ユーザーの場所に応じて異なるキャッシュ バージョンを持たせる必要がありました。そこで、VaryByCustom が設定された OutputCache ディレクティブをユーザー コントロールに与え、Global.asax の GetVaryByCustomString メソッドをオーバーライドして、ユーザーの場所を取得しました。問題は、単純なテスト ケースでもこれが機能しないことです。.aspx ページを含む新しいプロジェクトを作成し、その中に新しい .ascx ユーザー コントロールを配置することで、問題が発生しているかどうかを確認するために、Sitefinity のコンテキスト外でこのユース ケースをテストしました。ページには、現在のロード時間とコントロールを取得するラベルがあります。コントロールには、現在の時刻を表示するラベルもあります。ページ OutputCache をこれに設定すると、次のようになります。
<%@ OutputCache Duration="60" VaryByParam="none" %>
そしてこれに設定されたコントロール:
<%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser" %>
期待される機能は起こりません。このページを 2 つの異なるブラウザーで開いた場合、2 番目のラベルに 2 つの異なる時間が表示されると考えられていました。ここで何かが完全に欠けていますか?私は.NETキャッシングを扱うのは初めてなので、完全に可能です。
ありがとう
GetVaryByCustomString のオーバーライドは次のとおりです。
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom == "custom")
{
// return custom logic
}
else
{
return base.GetVaryByCustomString(context, custom);
}
}