Nei precedenti script ci siamo occupati dell'output cache di ASP.NET Core 7: ne abbiamo introdotto i concetti generali (https://www.aspitalia.com/script/1440/Migliorare-Scalabilita-ASP.NET-Core-Output-Cache.aspx), abbiamo visto come controllare i parametri (https://www.aspitalia.com/script/1441/Gestire-Query-String-Neloutput-Cache-ASP.NET-Core.aspx) e come creare policy di cache (https://www.aspitalia.com/script/1442/Definire-Durata-Output-Cache-ASP.NET-Core.aspx).
Tuttavia, tutti i nostri esempi sono stati limitati a Minimal API, che rappresenta il nuovo e compatto modo per esporre endpoint su un progetto ASP.NET Core, ma probabilmente non è diffuso quanto i controller.
Ovviamente, anche i controller supportano la nuova OutputCache, a patto di registrare il middleware nel corretto ordine, ossia prima della chiamata a MapController:
public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); // .. altri servizi qui ... builder.Services.AddAuthorization(); builder.Services.AddOutputCache(config => { // .. policy definite qui .. // https://www.aspitalia.com/script/1442/Definire-Durata-Output-Cache-ASP.NET-Core.aspx }); builder.Services.AddControllers(); var app = builder.Build(); // altri middleware... app.UseOutputCache(); app.MapControllers(); app.Run();
A questo punto, non dobbiamo far altro che decorare le nostre action con l'attributo OutputCache:
[HttpGet("demo")] [OutputCache(VaryByQueryKeys = new[] { "name" })] public IActionResult Basic(string name) { return this.Ok($"Hello, {name}, time is {DateTime.Now.ToLongTimeString()}"); } [HttpGet("short")] [OutputCache(PolicyName = "shortCache")] public IActionResult Short(string name) { return this.Ok($"Hello, {name}, time is {DateTime.Now.ToLongTimeString()}"); } [HttpGet("long")] [OutputCache(PolicyName = "longCache")] public IActionResult Long(string name) { return this.Ok($"Hello, {name}, time is {DateTime.Now.ToLongTimeString()}"); } [HttpGet("inline")] [OutputCache(Duration = 10)] public IActionResult Inline(string name) { return this.Ok($"Hello, {name}, time is {DateTime.Now.ToLongTimeString()}"); }
Come possiamo vedere dal codice in alto, le varie impostazioni che nel caso di minimal API vengono assegnate tramite lambda expression, in questo caso corrispondono ad altrettanti parametri dell'attributo OutputCache.
Le policy sono ovviamente condivise tra minimal API e controller - e pertanto è una best practice utilizzarle per definire la durata di cache, così come gli ulteriori parametri che vedremo nel corso dei prossimi script.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Collegare applicazioni server e client con .NET Aspire
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Utilizzare i variable font nel CSS
Ottenere un token di accesso per una GitHub App
Utilizzare Container Queries nominali
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Scrivere selettori CSS più semplici ed efficienti con :is()
.NET Aspire per applicazioni distribuite
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub
Filtrare i dati di una QuickGrid in Blazor con una drop down list
Gestione dei nomi con le regole @layer in CSS
I più letti di oggi
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare il pattern matching per semplificare le espressioni