ASP.NET 核心 ResponseCacheAttribute - VaryByCustom?

ASP.NET Core ResponseCacheAttribute - VaryByCustom?

我第一次使用 Microsoft.AspNetCore.Mvc.ResponseCacheAttribute 遇到了一个问题,我以前使用 OutputCache 中的 VaryByCustom 属性 可以解决这个问题ASP.NET(并在 global.asax 中使用 public override string GetVaryByCustomString(HttpContext context, string s))。

此 VaryByCustom 缓存似乎不再存在于 ASP.NET Core 中。是否有我在这里缺少的内置替代方案,或者我是否需要自己实现它才能实现类似的目标?

据我了解,您在 ASP.NET 核心中有两个灵活的选择:

  1. 如果您使用 ResponseCacheAttribute,请使用 VaryByHeaderVaryByQueryKeys

使用Headers时,需要将value写为header,可以是任意值(不需要向客户端暴露数据):

Response.Headers.Add("X-My-Vary-Header", "this-is-variable");

本质上,这就是 VaryByCustomString 为您所做的一切。在我看来,您不再被迫将此代码放在特定的 method/file 中(例如 global.asax)。

  1. 在 Razor 中缓存时尝试 <cache> Tag Helper。

在这里,您可以通过以下方式 "vary" 获得广泛的东西:vary-by-headervary-by-routevary-by-user,甚至是自定义 vary-by

看看这里并决定是使用属性还是缓存标签助手:https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/built-in/cache-tag-helper