Negli scorsi script ci siamo occupati di Output Cache in ASP.NET Core 7, e abbiamo iniziato ad apprezzarne la flessibilità e semplicità di configurazione. Abbiamo però trascurato un aspetto fondamentale per questo tipo di funzionalità: per quanto tempo una determinata risposta deve rimanere in cache?
Per default, la durata della cache è di un minuto, tuttavia possiamo facilmente modificare questa impostazione all'interno del solito metodo CacheOutput, quando stiamo definendo un endpoint di Minimal API:
app.MapGet("/cacheDemoInline", (string name) => $"Hello, {name}, time is {DateTime.Now.ToLongTimeString()}") .CacheOutput(builder => { builder.Expire(TimeSpan.FromSeconds(10)); });
Avere questa impostazione "inline" è sicuramente molto comodo, ma risulta impraticabile quando il numero degli endpoint aumenta, soprattutto se vogliamo mantenere una certa consistenza nel comportamento della nostra applicazione.
In questi casi, allora, è molto utile definire delle policy centralizzate, che poi possiamo utilizzare nei vari endpoint. Possiamo farlo in fase di registrazione del servizio:
builder.Services.AddOutputCache(config => { config.AddPolicy("shortCache", policy => { policy.Expire(TimeSpan.FromSeconds(30)); }); config.AddPolicy("longCache", policy => { policy.Expire(TimeSpan.FromMinutes(2)); }); });
Nello snippet in alto abbiamo definito due policy, shortCache e longCache, che possiamo poi referenziare tramite il loro nome, ove necessario:
app.MapGet("/cacheDemoShort", (string name) => $"Hello, {name}, time is {DateTime.Now.ToLongTimeString()}") .CacheOutput("shortCache"); app.MapGet("/cacheDemoLong", (string name) => $"Hello, {name}, time is {DateTime.Now.ToLongTimeString()}") .CacheOutput("longCache");
Tra tutte le policy, quella utilizzata per default è denominata Base Policy, e anch'essa può essere modificata in maniera simile:
builder.Services.AddOutputCache(config => { config.AddBasePolicy(policy => { policy.Expire(TimeSpan.FromSeconds(10)); }); // .. altre policy qui .. });
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Specificare il versioning nel path degli URL in ASP.NET Web API
Criptare la comunicazione con mTLS in Azure Container Apps
Usare il versioning con i controller di ASP.NET Core Web API
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Effettuare il binding di date in Blazor
Load test di ASP.NET Core con k6
Accesso sicuro ai secrets attraverso i file in Azure Container Apps
Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
Usare le variabili per personalizzare gli stili CSS
Utilizzare la versione generica di EntityTypeConfiguration in Entity Framework Core
Short-circuiting della Pipeline in ASP.NET Core
I più letti di oggi
- Microsoft annuncia Windows "TrustBridge"
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Estrarre dati randomici da una lista di oggetti in C#
- Usare il colore CSS per migliorare lo stile della pagina
- Una attached property per accedere a NavigationService da ViewModel in Silverlight 4.0