2012-02-23 11 views

Respuesta

15

crear un filtro de Acción Global y anular OnResultExecuting():

public class DisableCache : ActionFilterAttribute 
{ 
    public override void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)); 
     filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false); 
     filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); 
     filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     filterContext.HttpContext.Response.Cache.SetNoStore(); 
    } 
} 

y luego registrar esto en su Global.asax, así:

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new DisableCache()); 
    } 

en resumen, lo que hace es crear un Global Action Filter para que implícitamente esto se aplique a todos los Controladores y todas las Acciones.

+0

Gracias por su respuesta. ¿Qué hay de las secuencias de comandos, imágenes y CSS? ¿El filtro de acción global afectaría a esos también? En otras palabras, ¿se llama a un filtro de acción para solicitudes a controladores/acciones o en cada solicitud? Como se mencionó en @AdamTuliper, no me gustaría guardar en caché esos – enamrik

+0

@enamrik Hmmm ... después de probarlo parece que las imágenes y css todavía están en caché con este filtro de acción global. Tendría que investigar cómo prevenir esto. –

+0

No importa, aparentemente esa es la definición misma de un filtro de acción que solo ejecutan en solicitudes a acciones – enamrik

1

Sí, dependiendo del enfoque que tome. Me gusta aplicar las acciones a un controlador base (de ahí mi respuesta). Se podría aplicar el filtro en el siguiente enlace e implementarlo como un filtro global, así (registrado en su global.asax.cs)

Disable browser cache for entire ASP.NET website

5

Usted debe agregar este método para su Global.asax.cs archivo

protected void Application_BeginRequest(object sender, EventArgs e) 
     { 
      Response.AddHeader("Cache-Control", "no-cache, no-store, must-revalidate"); 
      Response.AddHeader("Pragma", "no-cache"); // HTTP 1.0. 
      Response.AddHeader("Expires", "0"); // Proxies. 
     } 

Esto desactiva la memoria caché en cada petición (imágenes, html, js, etc.).

1

En web.config se puede agregar encabezados adicionales para salir con cada respuesta

<configuration> 
    <system.webServer> 
     <httpProtocol> 
      <customHeaders> 
      <add name="Cache-control" value="no-cache"/> 
      </customHeaders> 
     </httpProtocol> 
    </system.webServer> 
</configuration> 
Cuestiones relacionadas