我在我的应用程序中的几个操作中添加了输出缓存,以便轻松提升性能。但是,这些操作还需要在每次请求后通过点击 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);
}
}
不,也没有用;一旦缓存了动作,动作过滤器似乎就被完全忽略了。真可惜。
那么,呃,我有什么办法(不实现自定义输出缓存提供程序)来确保我的视图被正确计数,并且干净且合理?