ASP.NET Core MVC 中的缓存标记帮助程序Cache Tag Helper in ASP.NET Core MVC
本文内容
缓存标记帮助程序通过将其内容缓存到内部 ASP.NET Core 缓存提供程序中,极大地提高了 ASP.NET Core 应用的性能。
有关标记帮助程序的概述,请参阅 ASP.NET Core 中的标记帮助程序。
以下 Razor 标记缓存当前日期:
<cache>@DateTime.Now</cache>
对包含标记帮助程序的页面的第一个请求显示当前日期。其他请求将显示已缓存的值,直到缓存过期(默认 20 分钟)或因内存压力而逐出。
缓存标记帮助程序属性Cache Tag Helper Attributes
已启用enabled
属性类型 | 示例 | 默认 |
---|---|---|
Boolean | true 、false | true |
enabled
确定是否缓存了缓存标记帮助程序所包含的内容。默认为 true
。如果设置为 false
,则不会缓存呈现的输出。
示例:
<cache enabled="true">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
expires-onexpires-on
属性类型 | 示例 |
---|---|
DateTimeOffset | @new DateTime(2025,1,29,17,02,0) |
expires-on
为缓存项设置一个绝对到期日期。
以下示例将在 2025 年 1 月 29 日下午 5:02 之前缓存缓存标记帮助程序的内容:
<cache expires-on="@new DateTime(2025,1,29,17,02,0)">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
expires-afterexpires-after
属性类型 | 示例 | 默认 |
---|---|---|
TimeSpan | @TimeSpan.FromSeconds(120) | 20 分钟 |
expires-after
设置从第一个请求时间到缓存内容的时间长度。
示例:
<cache expires-after="@TimeSpan.FromSeconds(120)">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
Razor 视图引擎将默认的 expires-after
值设置为 20 分钟。
expires-slidingexpires-sliding
属性类型 | 示例 |
---|---|
TimeSpan | @TimeSpan.FromSeconds(60) |
设置某个缓存项的值未被访问时,该缓存项应被逐出的时间。
示例:
<cache expires-sliding="@TimeSpan.FromSeconds(60)">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-headervary-by-header
属性类型 | 示例 |
---|---|
String | User-Agent 、User-Agent,content-encoding |
vary-by-header
接受逗号分隔的标头值列表,在标头值发生更改时触发缓存刷新。
以下示例监视标头值 User-Agent
。该示例将缓存提供给 Web 服务器的每个不同 User-Agent
的内容:
<cache vary-by-header="User-Agent">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-queryvary-by-query
属性类型 | 示例 |
---|---|
String | Make 、Make,Model |
vary-by-query
接受查询字符串(Keys) 中逗号分隔的 Query 列表,它们在任何列出的键值发生更改时触发缓存刷新。
以下示例监视 Make
和 Model
值。该示例将缓存提供给 Web 服务器的每个不同 Make
和 Model
的内容:
<cache vary-by-query="Make,Model">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-routevary-by-route
属性类型 | 示例 |
---|---|
String | Make 、Make,Model |
vary-by-route
接受路由参数名称的逗号分隔列表,用于在路由数据参数值发生更改时触发缓存刷新。
示例:
Startup.cs:
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{Make?}/{Model?}");
Index.cshtml:
<cache vary-by-route="Make,Model">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-cookievary-by-cookie
属性类型 | 示例 |
---|---|
String | .AspNetCore.Identity.Application 、.AspNetCore.Identity.Application,HairColor |
vary-by-cookie
接受 Cookie 名称的逗号分隔列表,用于在 Cookie 值发生更改时触发缓存刷新。
下例监视与 ASP.NET Core 标识相关联的 cookie。当用户进行身份验证时,标识 cookie 中的更改就会触发缓存刷新:
<cache vary-by-cookie=".AspNetCore.Identity.Application">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-uservary-by-user
属性类型 | 示例 | 默认 |
---|---|---|
Boolean | true 、false | true |
vary-by-user
指定当已登录用户(或上下文主体)发生更改时是否应重置缓存。当前用户也称为请求上下文主体,可通过引用 @User.Identity.Name
在 Razor 视图中查看。
下面的示例监视当前登录的用户触发缓存刷新:
<cache vary-by-user="true">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
通过登录和注销周期,使用此属性将内容维护在缓存中。当值设置为 true
时,身份验证周期会使已经过身份验证的用户的缓存失效。缓存无效是因为用户进行身份验证时生成了一个新的唯一 cookie 值。如果 cookie 不存在或已过期,则会维持缓存以呈现匿名状态。如果用户未经过身份验证,则会维持缓存。
vary-byvary-by
属性类型 | 示例 |
---|---|
String | @Model |
vary-by
允许自定义缓存的数据。当属性的字符串值引用的对象发生更改时,会更新缓存标记帮助程序的内容。通常将模型值的字符串串联分配给此属性。从效果上看,这导致了更新任何已连接的值都会使缓存无效。
以下示例假定视图的控制器方法将两个路由参数 myParam1
和 myParam2
的整数值相加,并将其作为单个模型属性返回。当此总和更改时,会再次呈现并缓存缓存标记帮助程序的内容。
操作:
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:
<cache vary-by="@Model">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
prioritypriority
属性类型 | 示例 | 默认 |
---|---|---|
CacheItemPriority | High 、Low 、NeverRemove 、Normal | Normal |
priority
为内置缓存提供程序提供缓存逐出指导。在内存压力下,Web 服务器将首先逐出 Low
缓存项。
示例:
<cache priority="High">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
priority
属性并不能保证特定级别的缓存保留。CacheItemPriority
仅供参考。将此属性设置为 NeverRemove
并不能保证缓存项将始终保留。请参阅其他资源部分中的相关主题,以获取详细信息。
缓存标记帮助程序依赖于内存缓存服务。如果尚未添加该服务,缓存标记帮助程序将为你添加。