Utilizzare VaryByCustom per l'OutputCache di ASP.NET

di Cristian Civera, in UserScript, ASP.NET, C#,

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

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

Nessuna risorsa collegata

I più letti di oggi