2009-11-24 13 views
7

Tengo la página que me gustaría guardar en la memoria caché utilizando la directiva OutputCache. Sin embargo, estoy usando un módulo de reescritura de URL para dirigir varias URL en esta página, cada una con diferentes contenidos.Cambiar OutputCache basado en la URL

¿Hay alguna forma de usar la memoria caché para cada URL? No hay otros criterios por los cuales deba variar los resultados de la caché.

Respuesta

10

Al final, esto fue bastante sencillo de solucionar.

  1. añada la siguiente directiva a la página que necesita ser almacenado en caché:

    <% @ OutputCache Duration = "600" ubicación = "Aguas abajo" VaryByParam = "none" VaryByCustom = "RawURL" %>

  2. Añadir este método para el archivo Global.asax

    public override string GetVaryByCustomString(HttpContext context, string custom) 
    { 
        switch (custom.ToUpper()) 
        { 
         case "RAWURL": 
          return context.Request.RawUrl; 
    
         default: 
          return ""; 
        } 
    } 
    
+0

Esto es inteligente ... pero todavía está devolviendo un 200 en lugar de un 304 (No modificado) como lo haría con una URL no enrutada. Por lo tanto, aunque no esté * generando * la página nuevamente, el cliente todavía tiene que * obtener * nuevamente, en lugar de usar su caché local. Aún así, buena pregunta. – harpo

0

Programaticamente puede establecer opciones de almacenamiento en caché utilizando Response.Cache. Puede activar la variable querystring y, según el caso, establecer las propiedades en Response.Cache de forma adecuada.

MSDN on Cache object
Another helpful article from aspalliance.com

+0

también puedo variar la CAC basado en los encabezados de solicitud, pero estos no cambian y no hay variables querystring utilizadas – Blatfrig