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
Eseguire attività basate su eventi con Azure Container Jobs
Effettuare chiamate con versioning da Blazor ad ASP.NET Core
Inizializzare i container in Azure Container Apps
Usare una container image come runner di GitHub Actions
Gestire errori funzionali tramite exception in ASP.NET Core Web API
Utilizzare ChatGPT con Azure OpenAI
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Usare un KeyedService di default in ASP.NET Core 8
Configurare dependabot per aggiornare le dipendenze di terze parti con GitHub Actions
Accesso sicuro ai secrets attraverso i file in Azure Container Apps
Usare le collection expression per inizializzare una lista di oggetti in C#
Eseguire query manipolando liste di tipi semplici con Entity Framework Core