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
Le novità di .NET 7 e C# 11
Utilizzare proprietà di tipo DateOnly con EF Core 6
.NET 7 Live Q&A
Usare Azure Application Gateway come reverse proxy per ASP.NET Core
Ottimizzare il codice JavaScript con i Shorthand Patterns - prima parte
Creare automaticamente una pipeline YAML da una sua definizione in Azure DevOps
Q# for Quantum Programming, an "only for the brave" session
Condividere i workflow tra più repository in GitHub
Utilizzare il tag HTML template
Miglioramenti alla leggibilità delle Media Query con le specifiche di livello 4
Utilizzare la parola chiave file nel codice C#
Installazione di una PWA Blazor
I più letti di oggi
- ASP.NET MVC, Aree e Controller: risolvere le ambiguità
- Raggruppare i parametri di una minimal API in un singolo oggetto in ASP.NET Core
- Gestire tipi complessi in query string grazie a IParsable in ASP.NET Core 7.0
- Leggere e scrivere su cookie tramite Blazor
- Migliorare la scalabilità di ASP.NET Core 7 grazie all'output cache
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!