ASP.. NET MVC OutputCacheAttribute与外部缓存提供程序



. NET MVC 5应用程序到Azure Redis (Microsoft.Web.RedisOutputCacheProvider Nuget包)我很惊讶地看到OutputCacheAttribute时设置使用OutputCacheLocation.AnyOutputCacheLocation.ServerAndClient

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

随机生成以下错误:

当使用像'RedisOutputCache'这样的自定义输出缓存提供程序时,只有以下过期策略和缓存特性支持:文件依赖、绝对过期、静态验证回调和静态替换回调。

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

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

你的选择是:

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

最新更新