比如說網(wǎng)站有一個Header.ascx用戶控件,每個頁面都調(diào)用此控件作為"頁面頭部",直接可以緩存此用戶控件就可以提交性能,不過,現(xiàn)在此Header.ascx用戶控件要顯示登陸用戶的登陸名,所以,就不能直接用下面這種緩存方式:
<% @ OutputCache Duration = " 86400 " VaryByParam = " None " %>
這個時候就可以利用"根據(jù)自定義字符串來緩存頁"這種方法了,具體如下:
<%@ OutputCache Duration="86400" VaryByParam="None" VaryByCustom="HeaderPageKey" %>
然后在Global類里面重寫方法 GetVaryByCustomString
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if(custom=="HeaderPageKey")
{
//緩存 Header.ascx 控件
if(context.Request.IsAuthenticated)
{
return context.User.Identity.Name;
}
else
{
return "NoAuthenticated_User";
}
}
return base.GetVaryByCustomString (context, custom);
}
{
if(custom=="HeaderPageKey")
{
//緩存 Header.ascx 控件
if(context.Request.IsAuthenticated)
{
return context.User.Identity.Name;
}
else
{
return "NoAuthenticated_User";
}
}
return base.GetVaryByCustomString (context, custom);
}
用戶如果沒有登陸,那么緩存一個版本,如果已經(jīng)登陸,那么根據(jù)登陸名的不同緩存另外一個版本,哈哈,為每個用戶都緩存了一個版本,這樣做,應(yīng)該說不是很好的解決方法。
上述緩存技術(shù)可以參考 http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpguide/html/cpconcachingversionsofpagebasedonparameters.asp
另外,MSPetShop3.0里面也用到了這樣的緩存方法,根據(jù)Request.Querystring以及是否登陸來緩存不同的版本,不過,這個緩存好像默認(rèn)沒有開啟。