Disabilitare la cache sul browser in ASP.NET MVC

di Marco De Sanctis, in ASP.NET MVC,

Se stiamo sviluppando un'applicazione che fa uso di chiamate AJAX per recuperare dati dal server, è bene inserire alcune direttive nella response che istruiscano il browser a non effettuare il caching del risultato.

Tipicamente tutti i browser gestiscono correttamente questa casistica, tranne Internet Explorer, mentre gli helper Ajax di MVC inseriscono un timestamp in querystring così da produrre ogni volta url differenti.

Se però vogliamo risolvere a monte il problema, possiamo sfruttare un semplice attributo che imposti correttamente gli header della response:

public class NoCacheActionFilter : 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();

    filterContext.HttpContext.Response.CacheControl = "no-cache";

    base.OnResultExecuting(filterContext);
  }
}

A questo punto ci sarà sufficiente applicarlo ai controller o alle action che tipicamente invochiamo tramite AJAX:

[NoCacheActionFilter]
public class MyAjaxController : Controller 
{
  ...
}

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi