Я добавил выходное кэширование к нескольким действиям в моем приложении для небольшого повышения производительности. Тем не менее, эти действия также должны увеличивать счетчик после каждого запроса (это счетчик просмотров), нажимая Redis db.
Сначала я решил, что могу просто отрегулировать порядок, в котором выполняются фильтры действий, чтобы обеспечить просмотр:
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);
}
}
Нет, тоже не работал; фильтры действий кажутся полностью проигнорированными после того, как действие будет кэшировано. Облом.
Итак, есть ли какой-либо способ (без внедрения пользовательского кэширующего поставщика вывода) для обеспечения того, чтобы мои представления учитывались правильно, что было чисто и разумно?