- Razor页面
- 通用
- 客户端开发
- 标记帮助程序
- 高级
ASP.NET Core MVC 中的缓存标记帮助程序
作者:Peter Kellner 和 Luke Latham
缓存标记帮助程序通过将其内容缓存到内部 ASP.NET Core 缓存提供程序中,极大地提高了 ASP.NET Core 应用的性能。
有关标记帮助程序的概述,请参阅 ASP.NET Core 中的标记帮助程序。
以下 Razor 标记缓存当前日期:
<cache>@DateTime.Now</cache>
对包含标记帮助程序的页面的第一个请求显示当前日期。 其他请求将显示已缓存的值,直到缓存过期(默认 20 分钟)或因内存压力而逐出。
缓存标记帮助程序属性
enabled
属性类型 | 示例 | 默认 |
---|---|---|
Boolean | true , false |
true |
enabled
确定是否缓存了缓存标记帮助程序所包含的内容。 默认值为 true
。 如果设置为 false
,则不会缓存呈现的输出 。
示例:
<cache enabled="true"> Current Time Inside Cache Tag Helper: @DateTime.Now </cache>
expires-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-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-sliding
属性类型 | 示例 |
---|---|
TimeSpan |
@TimeSpan.FromSeconds(60) |
设置某个缓存项的值未被访问时,该缓存项应被逐出的时间。
示例:
<cache expires-sliding="@TimeSpan.FromSeconds(60)"> Current Time Inside Cache Tag Helper: @DateTime.Now </cache>
vary-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-query
属性类型 | 示例 |
---|---|
String | Make , Make,Model |
vary-by-query
接受查询字符串(Query) 中逗号分隔的 Keys 列表,它们在任何列出的键值发生更改时触发缓存刷新。
以下示例监视 Make
和 Model
值。 该示例将缓存提供给 Web 服务器的每个不同 Make
和 Model
的内容:
<cache vary-by-query="Make,Model"> Current Time Inside Cache Tag Helper: @DateTime.Now </cache>
vary-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-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-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-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>
priority
属性类型 | 示例 | 默认 |
---|---|---|
CacheItemPriority |
High , Low , NeverRemove , Normal |
Normal |
priority
为内置缓存提供程序提供缓存逐出指导。 在内存压力下,Web 服务器将首先逐出 Low
缓存项。
示例:
<cache priority="High"> Current Time Inside Cache Tag Helper: @DateTime.Now </cache>
priority
属性并不能保证特定级别的缓存保留。 CacheItemPriority
仅供参考。 将此属性设置为 NeverRemove
并不能保证缓存项将始终保留。 请参阅其他资源部分中的相关主题,以获取详细信息。
缓存标记帮助程序依赖于内存缓存服务。 如果尚未添加该服务,缓存标记帮助程序将为你添加。