ASP.NET Core MVC 中的缓存标记帮助程序
缓存标记帮助程序通过将其内容缓存到内部 ASP.NET Core 缓存提供程序中,极大地提高了 ASP.NET Core 应用的性能。
有关标记帮助程序的概述,请参阅 ASP.NET Core 中的标记帮助程序。
以下 Razor 标记缓存当前日期:
<cache>@DateTime.Now</cache>
对包含标记帮助程序的页面的第一个请求显示当前日期。 其他请求将显示已缓存的值,直到缓存过期(默认 20 分钟)或因内存压力而逐出。
缓存标记帮助程序属性
enabled
属性类型 | 示例 | 默认值 |
---|---|---|
布尔 | 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
属性类型 | 示例 |
---|---|
字符串 | 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
属性类型 | 示例 |
---|---|
字符串 | 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
属性类型 | 示例 |
---|---|
字符串 | 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
属性类型 | 示例 |
---|---|
字符串 | .AspNetCore.Identity.Application ,.AspNetCore.Identity.Application,HairColor |
vary-by-cookie
接受 cookie 名称的逗号分隔列表,用于在 cookie 值发生更改时触发缓存刷新。
以下示例监视与 ASP.NET Core Identity 关联的 cookie。 当用户进行身份验证时,Identitycookie 中的更改就会触发缓存刷新:
<cache vary-by-cookie=".AspNetCore.Identity.Application">
Current Time Inside Cache Tag Helper: @DateTime.Now
</cache>
vary-by-user
属性类型 | 示例 | 默认值 |
---|---|---|
布尔 | 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 不存在或 cookie 已过期时,则维持缓存以呈现匿名状态。 如果用户未经过身份验证,则会维持缓存。
vary-by
属性类型 | 示例 |
---|---|
字符串 | @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
并不能保证缓存项将始终保留。 请参阅其他资源部分中的相关主题,以获取详细信息。
缓存标记帮助程序依赖于内存缓存服务。 如果尚未添加该服务,缓存标记帮助程序将为你添加。
其他资源
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈