本博推荐文章快速导航: Sql Server2005 Transact-SQL 新兵器学习 MCAD学习 代码阅读总结 ASP.NET状态管理 DB(数据库) WAP WinForm Flex

代码阅读总结之Fitch and Mather 7.0(自定义字符串缓存页)

前段时间工作比较忙,没时间读代码,这几天有空,正好又来静读代码了.

Menus_ascx中我们看到用了缓存自定义字符串"authenticated"

<%@ OutputCache Duration="86400" VaryByParam="None" VaryByCustom="authenticated" %>
注意:
@OutputCache 指令与必需的 Duration 和 VaryByParam 属性包括在一起。必须将 Duration 属性设置为大于零的任意整数。如果不想使用 VaryByParam 属性提供的功能,请将其值设置为 None


 

Global.asax文件中重写GetVaryByCustomString方法

此处是根据用户是否验证来缓存用户控件,即一个通过验证的用户控件,一个未验证的用户控件

 1public override string GetVaryByCustomString(HttpContext context, string custom)
 2        {
 3        // There are two different possible caching cases here so we return a different string in each one.
 4        if(context.Request.IsAuthenticated)
 5            {
 6            // Request is authenticated
 7            return "B";
 8            }
                                
 9        else
10            {
11            // Request is not authenticated
12            return "C";
13            }
            
14        }

 

根据此思路我们可以开发一个依浏览器类型不同的缓存页面的例子

例如我们现有页面WebForm3.aspx,我们可以根据访问着的浏览器类型来做页面缓存

首先在页面中加入

<%@ OutputCache Duration="600" VaryByParam="none" VaryByCustom="ietype" %>

如果定义了自定义字符串,必须在应用程序的 Global.asax 文件中重写 HttpApplication.GetVaryByCustomString 方法

 

 1public override string GetVaryByCustomString(HttpContext context, string custom)
 2        {
 3            string browserType=context.Request.Browser.Type;
 4
 5            //custom自定义字符串,它指定哪个缓存的响应被用于响应当前请求
 6            //有可能多个页面都定义了自定义字符串,这时可以依靠参数custom来具体区分
 7            if ( custom=="ietype" )
 8                if ( browserType=="IE6" )
 9                    //IE6浏览器返回字符
10                    return browserType;
11                else
12                    if ( browserType=="Opera7" )
13                        //Opera7浏览器返回字符
14                        return browserType;
15                    else
16                        //其他类型的浏览器返回字符
17                        return browserType;
18                
19            return browserType;
20        }

 

这样设置好后,

当我用IE6访问页面WebForm3.aspx时,服务器缓存这个类型浏览器的页面600秒

当我再用Opera7.54访问页面WebForm3.aspx时,服务器又缓存这个类型浏览器的页面600秒

posted @ 2005-10-18 13:29 aierong 阅读(1729) 评论(2)  编辑 收藏 网摘 所属分类: Asp.net代码阅读总结

  回复  引用    
#1楼 2006-05-09 09:50 | Fuck [未注册用户]
看不明白!!!
  回复  引用    
#2楼 2006-12-02 19:11 | jim[匿名] [未注册用户]
if ( custom=="ietype" )
8 if ( browserType=="IE6" )
9 //IE6浏览器返回字符
10 return browserType;
11 else
12 if ( browserType=="Opera7" )
13 //Opera7浏览器返回字符
14 return browserType;
15 else
16 //其他类型的浏览器返回字符
17 return browserType;
18
19 return browserType;}

干吗不这样?
if ( custom=="ietype" ){
return browerType;
}
而且不知道browerType在哪定义了?还请指教




标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-11-08 09:41 编辑过
Google站内搜索
[推荐职位]上海盛大网络招聘架构师

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》


相关链接: