たとえば、Web サイトには Header.ascx ユーザー コントロールがあります。各ページはこのコントロールを「ページ ヘッダー」として呼び出しますが、このユーザー コントロールはパフォーマンスを送信するために直接キャッシュできます。ユーザーの名前であるため、次のキャッシュ方法を直接使用することはできません:
<% @ OutputCache Duration = " 86400 " VaryByParam = " None " %>
このとき、次のように「カスタム文字列に基づいてページをキャッシュする」方法を使用できます:
<%@ OutputCache Duration="86400" VaryByParam="None" VaryByCustom="HeaderPageKey" %>
次に、Global クラスのメソッド GetVaryByCustomString をオーバーライドします。
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if(カスタム=="ヘッダーページキー")
{
//Header.ascx コントロールをキャッシュします
if(context.Request.IsAuthenticated)
{
context.User.Identity.Name を返します。
}
それ以外
{
"NoAuthenticated_User" を返します。
}
}
戻り値base.GetVaryByCustomString (コンテキスト、カスタム);
}
ユーザーがログインしていない場合は、1 つのバージョンがキャッシュされます。ユーザーがすでにログインしている場合は、ログイン名に基づいて別のバージョンがキャッシュされます。これは、ユーザーごとに 1 つのバージョンがキャッシュされるのは良くありません。解決。
上記のキャッシュ テクノロジについては、 http ://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpguide/html/cpconcachingversionsofpagebasedonparameters.asp を参照してください。
また、このキャッシュ方法も使用されます。 MSPetShop3.0 では、Request.Querystring とログイン状態に基づいてさまざまなバージョンがキャッシュされます。ただし、このキャッシュはデフォルトでは有効になっていないようです。
出典: kaka.net