带有外部缓存提供程序的ASP.NET MVC OutputCacheAttribute

Use*_*rol 31 .net asp.net caching redis asp.net-mvc-5

在将ASP.NET MVC 5应用程序切换到Azure Redis(Microsoft.Web.RedisOutputCacheProviderNuget包)后,我惊讶地发现OutputCacheAttribute当设置为使用OutputCacheLocation.Any或者OutputCacheLocation.ServerAndClient

[Route("Views/Orders")]
[OutputCache(Duration = 600, Location = OutputCacheLocation.Any)]
public ActionResult Orders()
{
}
Run Code Online (Sandbox Code Playgroud)

随机生成以下错误:

使用"RedisOutputCache"等自定义输出缓存提供程序时,仅支持以下过期策略和缓存功能:文件依赖性,绝对过期,静态验证回调和静态替换回调.

这很奇怪,因为上面的声明明确定义了绝对过期而没有任何先进的东西varybyparam.经过一些搜索,看起来没有解决这个问题,这是非常令人沮丧的.是否有任何外部缓存提供程序与ASP.NET缓存机制兼容?如果没有,您如何在MVC/WebApi应用程序中的集群方案中实现服务器端HTTP输出缓存?

Tim*_*Tim 1

问题是,如果端点经过身份验证,那么根据定义,输出会因用户而异。因此基本上所有外部输出缓存提供程序都不再是一种选择。

您的选择是:

  1. 如果端点可以安全地允许匿名,则取消保护端点
  2. 使用可能因用户而异的本地缓存
  3. 拆分您的端点,以便您使用子操作和/或 AJAX 调用来获取受保护的数据。这可以让您公开大多数内容,但保持实际数据不被缓存并受到保护
  4. 缓存与输出位于不同的层。您的应用服务器请求/响应和视图渲染真的是您的规模痛点吗?或者更可能是数据库以及任何服务层计算?这些层中的缓存很容易,并且可以根据用户的需要轻松改变。