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
Gestione dei nomi con le regole @layer in CSS
Aggiungere interattività lato server in Blazor 8
Eseguire query manipolando le liste contenute in un oggetto mappato verso una colonna JSON
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Creazione di plugin per Tailwind CSS: espandere le Funzionalità del Framework
Creare alias per tipi generici e tuple in C#
Utilizzare i primary constructor di C# per inizializzare le proprietà
Filtering sulle colonne in una QuickGrid di Blazor
Testare l'invio dei messaggi con Event Hubs Data Explorer
Cancellare una run di un workflow di GitHub
Change tracking e composition in Entity Framework
Utilizzare un service principal per accedere a Azure Container Registry