簡単なパフォーマンス向上のために、私のアプリケーションでいくつかのアクションに出力キャッシュを追加しました。ただし、これらのアクションでは、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);
}
}
いいえ、どちらも機能しませんでした。アクションフィルタは、アクションがキャッシュされると完全に無視されるように見えます。バマー。
私の見解がきれいで賢明であることを確実にするために、(カスタム出力キャッシングプロバイダを実装することなく)何らかの方法がありますか?
これはすごくうまくいきますが、私の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(); これは私のレスポンスです。キャッシュの変更。とにかくドーナツはそれを無視して、それをすべてキャッシュしているようだ。 – Dusda
VaryByCustomを使いこなすのではなく、ページビューをajax呼び出しに移動しました。しかし、この答えは、この問題の大きな解決策です。ありがとう:D。 – Dusda