Helper tag di cache in ASP.NET Core MVCCache Tag Helper in ASP.NET Core MVC

Di Peter Kellner e Luke LathamBy Peter Kellner and Luke Latham

L'helper tag di cache consente di migliorare le prestazioni dell'app ASP.NET Core memorizzandone il contenuto nel provider di cache ASP.NET Core interno.The Cache Tag Helper provides the ability to improve the performance of your ASP.NET Core app by caching its content to the internal ASP.NET Core cache provider.

Per una panoramica degli helper tag, vedere Helper tag in ASP.NET Core.For an overview of Tag Helpers, see Helper tag in ASP.NET Core.

Il seguente markup Razor memorizza nella cache la data corrente:The following Razor markup caches the current date:

<cache>@DateTime.Now</cache>

La prima richiesta alla pagina contenente l'helper tag consente di visualizzare la data corrente.The first request to the page that contains the Tag Helper displays the current date. Le richieste aggiuntive mostrano il valore memorizzato nella cache fino alla scadenza della cache (per impostazione predefinita 20 minuti) o fino a quando la data memorizzata nella cache viene rimossa dalla cache.Additional requests show the cached value until the cache expires (default 20 minutes) or until the cached date is evicted from the cache.

Attributi dell'helper tag di cacheCache Tag Helper Attributes

enabledenabled

Tipo di attributoAttribute Type EsempiExamples Impostazione predefinitaDefault
BooleanoBoolean true, falsetrue, false true

enabled determina se il contenuto incluso nell'helper tag di cache viene memorizzato nella cache.enabled determines if the content enclosed by the Cache Tag Helper is cached. Il valore predefinito è true.The default is true. Se impostato su false, l'output sottoposto a rendering non viene memorizzato nella cache.If set to false, the rendered output is not cached.

Esempio:Example:

<cache enabled="true">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

expires-onexpires-on

Tipo di attributoAttribute Type EsempioExample
DateTimeOffset @new DateTime(2025,1,29,17,02,0)

expires-on imposta una data di scadenza assoluta per l'elemento memorizzato nella cache.expires-on sets an absolute expiration date for the cached item.

Il codice di esempio seguente memorizza nella cache il contenuto dell'helper tag di cache fino alle 17:02 del 29 gennaio 2025:The following example caches the contents of the Cache Tag Helper until 5:02 PM on January 29, 2025:

<cache expires-on="@new DateTime(2025,1,29,17,02,0)">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

expires-afterexpires-after

Tipo di attributoAttribute Type EsempioExample Impostazione predefinitaDefault
TimeSpan @TimeSpan.FromSeconds(120) 20 minuti20 minutes

expires-after imposta il tempo di memorizzazione del contenuto nella cache a partire dalla prima richiesta.expires-after sets the length of time from the first request time to cache the contents.

Esempio:Example:

<cache expires-after="@TimeSpan.FromSeconds(120)">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

Il motore di visualizzazione Razor imposta il valore predefinito di expires-after su venti minuti.The Razor View Engine sets the default expires-after value to twenty minutes.

expires-slidingexpires-sliding

Tipo di attributoAttribute Type EsempioExample
TimeSpan @TimeSpan.FromSeconds(60)

Imposta il tempo trascorso il quale un elemento memorizzato nella cache viene rimosso se non è stato usato.Sets the time that a cache entry should be evicted if its value hasn't been accessed.

Esempio:Example:

<cache expires-sliding="@TimeSpan.FromSeconds(60)">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-headervary-by-header

Tipo di attributoAttribute Type EsempiExamples
StringaString User-Agent, User-Agent,content-encodingUser-Agent, User-Agent,content-encoding

vary-by-header accetta un elenco delimitato da virgole di valori di intestazione che attivano un aggiornamento della cache quando vengono modificati.vary-by-header accepts a comma-delimited list of header values that trigger a cache refresh when they change.

L'esempio seguente esegue il monitoraggio del valore dell'intestazione User-Agent.The following example monitors the header value User-Agent. Il codice dell'esempio memorizza nella cache il contenuto di ogni singolo elemento User-Agent presentato al server Web:The example caches the content for every different User-Agent presented to the web server:

<cache vary-by-header="User-Agent">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-queryvary-by-query

Tipo di attributoAttribute Type EsempiExamples
StringaString Make, Make,ModelMake, Make,Model

vary-by-query accetta un elenco delimitato da virgole di Keys in una stringa di query (Query) che attiva un aggiornamento della cache quando cambia il valore di qualsiasi chiave inclusa nell'elenco.vary-by-query accepts a comma-delimited list of Keys in a query string (Query) that trigger a cache refresh when the value of any listed key changes.

L'esempio seguente esegue il monitoraggio dei valori di Make e Model.The following example monitors the values of Make and Model. L'esempio memorizza nella cache il contenuto di ogni singolo valore Make e Model presentato al server Web:The example caches the content for every different Make and Model presented to the web server:

<cache vary-by-query="Make,Model">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-routevary-by-route

Tipo di attributoAttribute Type EsempiExamples
StringaString Make, Make,ModelMake, Make,Model

vary-by-route accetta un elenco delimitato da virgole di nomi di parametri di route che attivano un aggiornamento della cache quando cambia il valore del parametro dei dati di route.vary-by-route accepts a comma-delimited list of route parameter names that trigger a cache refresh when the route data parameter value changes.

Esempio:Example:

Startup.cs:Startup.cs:

routes.MapRoute(
    name: "default",
    template: "{controller=Home}/{action=Index}/{Make?}/{Model?}");

Index.cshtml:Index.cshtml:

<cache vary-by-route="Make,Model">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
Tipo di attributoAttribute Type EsempiExamples
StringaString .AspNetCore.Identity.Application, .AspNetCore.Identity.Application,HairColor.AspNetCore.Identity.Application, .AspNetCore.Identity.Application,HairColor

vary-by-cookie accetta un elenco delimitato da virgole di nomi di cookie che attivano un aggiornamento della cache quando cambiano i valori dei cookie.vary-by-cookie accepts a comma-delimited list of cookie names that trigger a cache refresh when the cookie values change.

L'esempio seguente gestisce il monitoraggio dei cookie associati ad ASP.NET Core Identity.The following example monitors the cookie associated with ASP.NET Core Identity. Quando un utente viene autenticato, una modifica del cookie di Identity attiva un aggiornamento della cache:When a user is authenticated, a change in the Identity cookie triggers a cache refresh:

<cache vary-by-cookie=".AspNetCore.Identity.Application">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

vary-by-uservary-by-user

Tipo di attributoAttribute Type EsempiExamples Impostazione predefinitaDefault
BooleanoBoolean true, falsetrue, false true

vary-by-user specifica se la cache deve essere o meno reimpostata quando cambia l'utente connesso (o l'entità di contesto connessa).vary-by-user specifies whether or not the cache resets when the signed-in user (or Context Principal) changes. L'utente corrente è detto anche entità di sicurezza del contesto della richiesta e può essere visualizzato in una visualizzazione Razor mediante riferimento a @User.Identity.Name.The current user is also known as the Request Context Principal and can be viewed in a Razor view by referencing @User.Identity.Name.

L'esempio seguente esegue il monitoraggio dell'utente connesso corrente per attivare un aggiornamento della cache:The following example monitors the current logged in user to trigger a cache refresh:

<cache vary-by-user="true">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

Questo attributo consente di mantenere il contenuto nella cache durante un ciclo di accesso e disconnessione.Using this attribute maintains the contents in cache through a sign-in and sign-out cycle. Quando il valore è impostato su true, un ciclo di autenticazione invalida la cache per l'utente autenticato.When the value is set to true, an authentication cycle invalidates the cache for the authenticated user. La cache viene invalidata perché viene generato un nuovo valore di cookie univoco al momento dell'autenticazione di un utente.The cache is invalidated because a new unique cookie value is generated when a user is authenticated. La cache viene mantenuta per lo stato anonimo se non è presente alcun cookie o il cookie è scaduto.Cache is maintained for the anonymous state when no cookie is present or the cookie has expired. Se l'utente non viene autenticato, la cache viene mantenuta.If the user is not authenticated, the cache is maintained.

vary-byvary-by

Tipo di attributoAttribute Type EsempioExample
StringaString @Model

vary-by consente di personalizzare quali dati vengono memorizzati nella cache.vary-by allows for customization of what data is cached. Quando l'oggetto al quale fa riferimento il valore stringa dell'attributo cambia, il contenuto dell'helper tag di cache viene aggiornato.When the object referenced by the attribute's string value changes, the content of the Cache Tag Helper is updated. Spesso a questo attributo viene assegnata una concatenazione stringa di valori del modello.Often, a string-concatenation of model values are assigned to this attribute. In effetti, da ciò risulta uno scenario in cui un aggiornamento di uno qualsiasi dei valori concatenati invalida la cache.Effectively, this results in a scenario where an update to any of the concatenated values invalidates the cache.

L'esempio seguente presuppone che il metodo del controller che esegue il rendering della visualizzazione effettui la somma dei valori interi dei due parametri di route, myParam1 e myParam2, e restituisca la somma come proprietà singola del modello.The following example assumes the controller method rendering the view sums the integer value of the two route parameters, myParam1 and myParam2, and returns the sum as the single model property. Quando questa somma cambia, il contenuto dell'helper tag di cache viene sottoposto a rendering e memorizzato di nuovo nella cache.When this sum changes, the content of the Cache Tag Helper is rendered and cached again.

Azione:Action:

public IActionResult Index(string myParam1, string myParam2, string myParam3)
{
    int num1;
    int num2;
    int.TryParse(myParam1, out num1);
    int.TryParse(myParam2, out num2);
    return View(viewName, num1 + num2);
}

Index.cshtml:Index.cshtml:

<cache vary-by="@Model">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

prioritypriority

Tipo di attributoAttribute Type EsempiExamples Impostazione predefinitaDefault
CacheItemPriority High, Low, NeverRemove, NormalHigh, Low, NeverRemove, Normal Normal

priority offre indicazioni per la rimozione dalla cache al provider di cache predefinito.priority provides cache eviction guidance to the built-in cache provider. In condizioni di utilizzo elevato della memoria, il server Web rimuove per prime le voci della cache Low.The web server evicts Low cache entries first when it's under memory pressure.

Esempio:Example:

<cache priority="High">
    Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>

L'attributo priority non garantisce un livello specifico di mantenimento nella cache.The priority attribute doesn't guarantee a specific level of cache retention. CacheItemPriority è un semplice suggerimento.CacheItemPriority is only a suggestion. L'impostazione di questo attributo su NeverRemove non garantisce che gli elementi memorizzati nella cache vengano sempre mantenuti.Setting this attribute to NeverRemove doesn't guarantee that cached items are always retained. Per altre informazioni, vedere gli argomenti nella sezione Risorse aggiuntive.See the topics in the Additional Resources section for more information.

L'helper tag di cache dipende dal servizio cache in memoria.The Cache Tag Helper is dependent on the memory cache service. L'helper tag di cache aggiunge il servizio se non è stato aggiunto.The Cache Tag Helper adds the service if it hasn't been added.

Risorse aggiuntiveAdditional resources