如何:使用自定义字符串对页的各个版本进行缓存

更新:2007 年 11 月

除了按浏览器类型和参数进行不同的输出缓存行为外,还可以根据您定义的方法所返回的不同字符串对页输出的多个版本进行缓存。

根据自定义字符串对页进行缓存时,应首先指定要使用的自定义字符串的标识符。然后在应用程序的 Global.asax 文件中创建一个方法,该方法接受此标识符,并且返回一个值,作为进行不同的输出缓存行为的依据。

根据自定义字符串对页输出的多个版本进行缓存

  1. 在 ASP.NET 页中包括 @ OutputCache 指令,该指令带有必需的 DurationVaryByParam 属性。必须将 Duration 属性设置为大于零的整数。如果不想使用 VaryByParam 属性提供的功能,则必须将其值设置为“无”。

  2. 若要以声明方式设置自定义字符串,请在 @ OutputCache 指令中包括 VaryByCustom 属性,并将该属性设置为您要作为进行不同输出缓存行为的依据的字符串。

    下面的指令根据自定义字符串“minorversion”改变页输出。

    <%@ OutputCache Duration="10" VaryByParam="None" VaryByCustom="minorversion" %>
    
  3. 若要以编程方式设置自定义字符串,请调用 SetVaryByCustom 方法,并将要使用的自定义字符串传递给它。

    下面的代码示例演示如何将自定义字符串设置为“minorversion”。

    Response.Cache.SetVaryByCustom("minorversion");
    
    Response.Cache.SetVaryByCustom("minorversion")
    
    5ecf4420.alert_note(zh-cn,VS.90).gif说明:

    如果试图以编程方式和声明方式设置自定义字符串,则会收到 InvalidOperationException。您需要选择其中一种方法。

  4. 在应用程序的 Global.asax 文件中,重写 GetVaryByCustomString 方法以指定自定义字符串的输出缓存行为。

    被重写的方法接受您在 VaryByCustom 属性或 SetVaryByCustom 方法中设置的字符串,作为它的 arg 参数。例如,有些页可能根据请求浏览器的次版本进行缓存。对于这些页,可以将 VaryByCustom 属性设置为“minorversion”。然后,在被重写的 GetVaryByCustomString 方法中,可以检查 arg 参数,并根据 arg 参数的值是否为“minorversion”返回不同的字符串。

    下面的代码示例演示一个 Global.asax 文件,其中的 GetVaryByCustomString 方法被重写。

    <%@ Application language="C#" %>
    <script runat="server">
    public override string GetVaryByCustomString(HttpContext context, 
        string arg)
    {
        if(arg == "minorversion")
        {
            return "Version=" +
                context.Request.Browser.MinorVersion.ToString();
        }
        return base.GetVaryByCustomString(context, arg);
    }
    </script>
    
    <script runat="server">
    Public Overrides Function GetVaryByCustomString(context _
            As HttpContext, arg As String) As String
        If (arg = "minorversion") Then
            Return "Version=" & _
                context.Request.Browser.MinorVersion.ToString()
        return base.GetVaryByCustomString(context, arg);
    End Function
    </script>
    

请参见

任务

如何:以声明方式设置 ASP.NET 页的可缓存性

概念

缓存 ASP.NET 页

设置页的可缓存性

缓存页的多个版本