Nello script #334 è stato mostrato come implementare meccanismi di caching delle pagine ASP.NET per ridurre i tempi di elaborazione e di risposta ad una richiesta.
In alcuni casi però, memorizzare una pagina in base ai parametri della querystring e alle headers non basta. Per esempio, in un'applicazione che permette contenuti personalizzati in base all'utente loggato, è necessario effettuare copie diverse di una pagina. A questo scopo viene in aiuto il parametro VaryByCustom.
Il motore di caching utilizza questa chiave, insieme a VaryByParam e VaryByHeaders, per generare una chiave univoca identificativa della pagina memorizzata. Ad ogni richiesta di una pagina, prima che venga processata, viene verificato se esiste in cache una copia. Per far ciò, il modulo ricostruisce la chiave univoca in base alla richiesta e richiamando il metodo GetVaryByCustomString dell'oggetto HttpApplication.
Quindi, per risolvere il problema proposto prima, non dovremo far altro che sovrascrivere il metodo nel Global.asax e restituire il nome dell'utente loggato e generare così cache delle pagine in base all'utente:
public override string GetVaryByCustomString(HttpContext context, string custom) { if (custom == "user") return context.User.Identity.Name; else return base.GetVaryByCustomString(context, custom); }
Ora non ci resta che specificare la chiave user nelle pagine che vogliamo memorizzare anche in base all'utente:
<%@ OutputCache duration="3600" VaryByParam="none" Location="server" VaryByCustom="user" %>
Nell'esempio allegato, è possibile fare logon con due utenti differenti. Noterete, controllando nome utente e data, che la pagina con la chiave custom sarà memorizzata in base all'utente, mentre quella senza saluterà sempre il primo utente con la quale avete effettuato la prima richiesta alla pagina.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Load test di ASP.NET Core con k6
Short-circuiting della Pipeline in ASP.NET Core
Usare ASP.NET Core dev tunnels per testare le applicazioni su internet
Implementare il throttling in ASP.NET Core
Cache policy su route groups di Minimal API in ASP.NET Core 7
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes