在Asp.Net 4.0 的web.config文件中添加了关于缓存的配置节,如下所示:
我们可以在Web.config中配置自定义的OutputCacheProvider,并将自定义Provider指定为默认的Provider。
1.自定义OutputCacheProvider需要实现System.Web.Cacheing. OutputCacheProvider抽象类,网上有很多例子都用文件缓存做例子。这个例子太俗了,我写了一个新的例子,在设置的缓存时间小于指定阀值时,缓存到HttpRuntime.Cache中,否则缓存到文件中,如下代码:
2.如何使用自定义的OutputCacheProvider
1)在配置文件中做配置,将自定义的实现作为默认输出缓存支持,请看文章开始的配置
2)在UserControl中指定使用Provider的名字,改名字在web.config中定义,例如
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="IamUserControl.ascx.cs" Inherits="OutputCacheTest.IamUserControl" %> <%@ OutputCache Duration="3000" ProviderName="AspNetInternalProvider" VaryByParam="None" %>
需要注意的是,只能在UserControl中指定Provider的名字,在Page的生明中是不允许的,在Page中默认情况会使用web.config中配置的defaultProvider,但是我们可以通过3)中介绍的方法给不同的页面使用不同的OutputCacheProvider实现。
3)在Global.asax文件中重写GetOutputCacheProviderName(HttpContext context)方法,根据context返回不同的实现名字,如下例子
public override string GetOutputCacheProviderName(HttpContext context) { if (context.Request.Path.StartsWith("/default.aspx",StringComparison.CurrentCultureIgnoreCase)) { return "AspNetInternalProvider"; } return base.GetOutputCacheProviderName(context); }