パフォーマンスを簡単に向上させるために、アプリのいくつかのアクションに出力キャッシュを追加しました。ただし、これらのアクションでは、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);
}
}
いいえ、どちらも機能しませんでした。アクションがキャッシュされると、アクションフィルターは完全に無視されるように見えます。残念。
それで、ええと、(カスタム出力キャッシュプロバイダーを実装せずに)ビューが適切にカウントされ、クリーンで賢明であることを確認する方法はありますか?