我已经添加输出缓存的一对夫妇的行动,我的应用程序进行一些简单的性能提升。但是,这些操作还需要在每次请求(它是一个视图计数器)后通过点击Redis数据库来增加计数器。与输出缓存和其他行动工作滤清器
起初,我想我可能只是调整中的操作筛选器执行,以确保观看次数的计算顺序:
public class CountersAttribute : ActionFilterAttribute
{
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
//increment my counter all clever like
base.OnResultExecuted(filterContext);
}
}
但没有工作;显然OutputCacheAttribute不像一个正常的操作过滤器。然后我尝试实现一个自定义输出缓存:
public class OutputCacheWithCountersAttribute : OutputCacheAttribute
{
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
//straight to the source to get my headcount!
base.OnResultExecuted(filterContext);
}
}
不,也没有工作;一旦动作被缓存,动作过滤器似乎完全被忽略。游民。
所以,呃,有没有办法(没有实现自定义输出缓存提供者)对我来说,我保证意见正确计算是干净和理性呢?
这很奇妙,除了现在我的VaryByCustom参数不工作。 GetVaryByCustomString()在全局变量中被调用,但是Donut似乎没有遵守我所做的Response.Cache更改(即关闭认证用户的缓存)。 – Dusda
context.Response.Cache.SetCacheability(HttpCacheability.NoCache); context.Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1)); context.Response.Cache.SetNoStore(); context.Response.Cache.SetNoServerCaching(); 这些是我的Response.Cache更改;无论如何,甜甜圈似乎无视它们并缓存它。 – Dusda
我将页面视图移动到ajax调用,而不是再混淆VaryByCustom。但是,给出的答案是解决这个问题的一个很好的方法。谢谢:D。 – Dusda