Definire la durata dell'output cache in ASP.NET Core 7

di Marco De Sanctis, in ASP.NET Core,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi