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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Scrivere selettori CSS più semplici ed efficienti con :is()
Loggare le query più lente con Entity Framework
Filtering sulle colonne in una QuickGrid di Blazor
Selettore CSS :has() e i suoi casi d'uso avanzati
Managed deployment strategy in Azure DevOps
Gestire i dati con Azure Cosmos DB Data Explorer
Configurare e gestire sidecar container in Azure App Service
Escludere alcuni file da GitHub Secret Scanning
Usare il colore CSS per migliorare lo stile della pagina
Introduzione ai web component HTML
Migliorare l'organizzazione delle risorse con Azure Policy