Compartir a través de


Almacenar en caché versiones de una página basada en cadenas personalizadas

Además de poder variar el contenido de la caché según el tipo de explorador, el atributo VaryByCustom y el método HttpCachePolicy.SetVaryByCustom de la directiva @ OutputCache permiten almacenar en la caché de resultados múltiples versiones de una página basadas en una cadena personalizada que se haya definido.

Si se desea ampliar la funcionalidad de la caché de resultados con alguna de estas técnicas, es necesario reemplazar el método HttpApplication.GetVaryByCustomString en el archivo Global.asax de la aplicación. El código que se escriba en la instrucción de sustitución del método definirá cómo la aplicación debe almacenar en caché los resultados de páginas que dependan de la cadena o cadenas personalizadas que se hayan especificado.

Para almacenar en caché múltiples versiones del resultado de una página de forma declarativa según cadenas personalizadas

  1. En el archivo .aspx, incluya una directiva @OutputCache con los atributos requeridos Duration y VaryByParam. El atributo Duration debe ser un valor entero mayor que cero. Si no desea emplear la funcionalidad que ofrece el atributo VaryByParam, debe establecer su valor como None.

  2. En el cuerpo de la directiva @OutputCache, especifique el atributo VaryByCustom que tenga configurada la cadena de la que deba depender la página almacenada en la caché de resultados. La directiva siguiente almacena distintas versiones de la página basadas en la cadena personalizada "minorversion".

    <%@ OutputCache Duration="10" VaryByParam="None" VaryByCustom="minorversion" %>
    
  3. En un bloque de declaración de código del archivo global.asax de la aplicación, se debe reemplazar el método GetVaryByCustomString para especificar el comportamiento de la caché de resultados respecto a la cadena personalizada.

Para almacenar en caché múltiples versiones del resultado de una página mediante programación según cadenas personalizadas

  1. En el bloque de declaración de código o en la clase de código subyacente de la página, utilice la sintaxis Response.Cache para establecer la caducidad y las directivas de visibilidad para el contenido de la página almacenado en la caché. Para ello puede utilizar los métodos HttpCachePolicy.SetExpires y HttpCachePolicy.SetCacheability, respectivamente. Para obtener más información, vea Configurar la caducidad del almacenamiento de páginas en caché y Configurar la posibilidad de almacenar una página en caché.

  2. En el mismo código, especifique la cadena personalizada en el parámetro custom del método SetVaryByCustom. En el código siguiente la cadena personalizada se establece como "minorversion".

    Response.Cache.SetVaryByCustom("minorversion");
    [Visual Basic]
    Response.Cache.SetVaryByCustom("minorversion")
    
  3. En un bloque de declaración de código del archivo Global.asax de la aplicación, se debe reemplazar el método GetVaryByCustomString para especificar el comportamiento de la caché de resultados respecto a la cadena personalizada.

En el ejemplo siguiente se muestra cómo un archivo Global.asax reemplaza el método GetVaryByCustomString cuando una página de la aplicación pasa la cadena personalizada minorversion.

<script>
public override string GetVaryByCustomString(HttpContext context, string arg){
  If (arg = "minorversion"){
    Return "Version=" + context.Request.Browser.MinorVersion.ToString();
  }
}
</script>
[Visual Basic]
<script>
Public Overrides Function GetVaryByCustomString(context As HttpContext, arg As String) As String
   If (arg = "minorversion") Then
      return "Version=" & context.Request.Browser.MinorVersion.ToString()
    End If
End Function
</script>

En el ejemplo siguiente se muestra una página que interactúa con el archivo Global.asax anterior para modificar la caché de resultados según la cadena personalizada minorversion.

Nota   En este ejemplo la página utiliza una sintaxis declarativa para variar la página almacenada en la caché de resultados. Si desea conseguir el mismo efecto mediante programación, incluya código similar al mostrado en Configurar la caducidad del almacenamiento de páginas en caché entre las etiquetas de apertura y cierre del elemento <script>.

<%@ OutputCache Duration="30" VaryByParam="none" VaryByCustom="minorversion" %>
<Script language="C#" runat="server">
    public void Page_Load(Object sender, EventArgs e) {
        browserversion.InnerHtml = Request.Browser.MinorVersion.ToString();
        timestamp.InnerHtml = DateTime.Now.ToString("r");
    }
</Script>

Varying output by custom string (querystring value): <B id="browserversion" runat="server"/>
<BR>
Added to the cache: <B id="timestamp" runat="server" />
[Visual Basic]
<%@ Page Language="VB" %>
<%@ OutputCache Duration="30" VaryByParam="none" VaryByCustom="minorversion" %>

<Script runat="server">
    Public Sub Page_Load
        browserversion.InnerHtml = Request.Browser.MinorVersion.ToString()
        timestamp.InnerHtml = DateTime.Now.ToString("r")
    End Sub
</Script>

Varying output by browser: <B id="browserversion" runat="server"/>
<BR>
Added to the cache: <B id="timestamp" runat="server" />

Cuando se solicita la página de este ejemplo con un valor distinto en la propiedad HttpBrowserCapabilities.MinorVersion, se almacena en caché una versión distinta del resultado de la página para cada explorador que haga una solicitud. Por ejemplo, una solicitud de un explorador Internet Explorer 5 hace que se almacene una versión de la página en la caché y una solicitud de un explorador Internet Explorer 5.5 hace que se almacene otra versión distinta.

Vea también

@ OutputCache | Almacenar en caché páginas de ASP.NET | HttpApplication.GetVaryByCustomString (Método) | VaryByParams | VaryByHeaders