4.2.9 以编程方式操作页面输出缓存
如果希望对ASP.NET Framework缓存页面的过程做更多控制,则可以直接操作HttpCachePolicy类。该类由Response.Cache属性暴露。
HttpCachePolicy类包括的属性和方法可用来以编程方式执行<%@ OutputCache %>指令可以设置的所有任务。我们也可以使用该类的方法来操作发送到代理服务器和浏览器的HTTP缓存头。
该类支持下面的属性。
VaryByHeaders--返回用于控制输出缓存变化的头列表。
VaryByParams--返回用于控制输出缓存变化的查询字符串和表单参数。
HttpCachePolicy类也支持下面这些方法。
AddValidationCallback--用于创建一个方法,该方法在从缓存读取一个页面时自动调用。
AppendCacheExtension--用于添加自定义文本到Cache-Control HTTP头。
SetAllowResponseInBrowserHistory--用于避免页面出现在浏览器的历史缓存中。
SetCacheability--用于设置Cache-Control头和服务器缓存。
SetETag--用于设置ETag HTTP头。
SetETagFromFileDependencies--用于用页面依赖的文件的时间戳设置ETag HTTP头。
SetExpires--用于设置Expires HTTP头。
SetLastModified--用于设置Last-Modified HTTP头。
SetLastModifiedFromFileDependencies--用于用页面依赖的文件的时间戳设置Last-Modified HTTP头。
SetMaxAge--用于设置Cache-Control:max-age HTTP头。
SetNoServerCaching--用于禁用Web服务器缓存。
SetNoStore--用于发送一个Cache-Control:no-store HTTP头。
SetNoTransform--用于发送一个Cache-Control:no-transformHTTP头。
SetOmitVaryStar--用于不发送vary:* HTTP 头。
SetProxyMaxAge--用于设置Cache-Control:s-maxage HTTP头。
SetRevalidation--用于设置Cache-Control HTTP头为must-revalidation或proxy- revalidate。
SetSlidingExpiration--用于设置一个弹性(Sliding)过期策略。
SetValidUntilExpires--用于在浏览器发送一个Cache-Control头时,避免页面从Web服务器缓存中过期。
SetVaryByCustom--用于设置传递给Global.asax文件中的GetVaryByCustomString()方法的字符串。
例如,代码清单4-15所示的页面以编程的方式设置页面的输出缓存。该页面缓存到浏览器、代理服务器和Web服务器15秒。
代码清单4-15 ProgramOutputCache.aspx
<%@ Page Language="C#" %><%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server">
void Page_Load() { Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetExpires(DateTime.Now.AddSeconds(15)); Response.Cache.SetMaxAge(TimeSpan.FromSeconds(15)); Response.Cache.SetValidUntilExpires(true); Response.Cache.SetLastModified(DateTime.Now); Response.Cache.SetOmitVaryStar(true); } </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server"> <title>Program OutputCache</title> </head> <body> <form id="form1" runat="server"> <div>
<%= DateTime.Now.ToString("T") %>
<br /><br /> <a href="ProgramOutputCache.aspx">Request this Page</a>
</div> </form> </body> </html>
|
显然,以编程方式启用页面输出缓存要比声明方式更困难。需要调用许多方法来实现和使用<%@ OutputCache %>指令等效的缓存页面的操作。然而,以编程方式处理缓存可以更灵活地控制发送给代理服务器和浏览器的HTTP头。
4.2.10 创建页面输出缓存配置 |
|
除了为应用程序的每个页面配置页面输出缓存,还可以在Web配置文件中配置页面输出缓存,而后将这些设置应用到多个页面。可以创建一个缓存配置(Cache Profile),使网站更易于管理。
例如,代码清单4-16所示的Web配置文件包含了一个名叫Cache1Hour的缓存配置,用于缓存页面一个小时。
代码清单4-16 Web.Config
<%@ Page Language="C#" %><configuration> <system.web> <caching> <outputCacheSettings> <outputCacheProfiles> <add name="Cache1Hour" duration="3600" varyByParam="none" /> </outputCacheProfiles> </outputCacheSettings> </caching> </system.web> </configuration>
|
代码清单4-17所示的页面使用了Cache1Hour配置。该配置设置于<%@ OutputCache %>指令的CacheProfile特性。
代码清单4-17 OutputCacheProfile.aspx
<%@ Page Language="C#" %><%@ Page Language="C#" %> <%@ OutputCache CacheProfile="Cache1Hour" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server"> <title>Output Cache Profile</title> </head> <body> <form id="form1" runat="server"> <div>
<%= DateTime.Now.ToString("T") %>
</div> </form> </body> </html>
|
可以给缓存配置设置和独立页面的<%@ OutputCache %>指令一样的特性。例如,可以在缓存配置中设置varyByParam、VaryByControl、varyByHeader甚至varyByCustom特性。 |
|