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

时间:2016-11-15 12:24:13

标签: asp.net .net caching asp.net-mvc-5 redis

将ASP.NET MVC 5应用程序切换到Azure Redis(Microsoft.Web.RedisOutputCacheProvider Nuget包)后,我很惊讶OutputCacheAttribute设置为使用OutputCacheLocation.Any或{{1}时}

OutputCacheLocation.ServerAndClient

随机生成以下错误:

  

使用“RedisOutputCache”之类的自定义输出缓存提供程序时,   只有以下过期策略和缓存功能   支持:文件依赖性,绝对过期,静态   验证回调和静态替换回调。

这很奇怪,因为上面的声明清楚地定义了绝对过期而没有任何高级的东西,如[Route("Views/Orders")] [OutputCache(Duration = 600, Location = OutputCacheLocation.Any)] public ActionResult Orders() { } 。经过一些搜索后,似乎没有this issue的修复,这非常令人沮丧。是否有任何外部缓存提供程序与ASP.NET缓存机制兼容?如果没有,您如何在MVC / WebApi应用程序中的集群方案中实现服务器端HTTP输出缓存?

1 个答案:

答案 0 :(得分:0)

问题在于,如果端点经过身份验证,则根据定义,输出因用户而异。所以基本上所有的外部输出缓存提供者都不再是一个选项。

您的选择是:

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