3

ASP.NET アプリケーションに DevTrends.MvcDonutCaching パッケージを使用していますが、うまく機能します。現在私が抱えている問題の 1 つは、子アクション用に設定した VaryByCustom キャッシュを無効にすることです。

それは私が VaryByCustom セットアップのために持っているいくつかのコードです:

public override string GetVaryByCustomString(HttpContext context, string arg)
{
  if (arg == "userlogin" && context.User.Identity.IsAuthenticated)
  {
     return "UserLogin=" + context.User.Identity.Name;
  }

  return base.GetVaryByCustomString(context, arg);
}

それが私のアクションの装飾方法です:

[Authorize]
[DonutOutputCache(Duration = 3600, VaryByCustom = "userlogin")]
public ActionResult UserProfile()
{ ... }

そして、それが私がそのキャッシュをクリーンアップしようとした方法です(また、パラメータなしで「userlogin」を使用して試しましたが、これらのどれも機能しませんでした:

OutputCacheManager om = new OutputCacheManager();
om.RemoveItem("Customer", "UserProfile", new { UserLogin = User.Identity.Name });

それはカミソリビューの部分です:

<div id="cabinetMain">
 @{Html.RenderAction("UserProfile", true);}
</div>

どんな助けでも大歓迎です。

ありがとう。

4

1 に答える 1

5

私にとってうまくいった解決策は、 RemoveItem の代わりに OutputCacheManager の RemoveItems メソッドを使用することです。RouteValueDictionary を使用する必要があるため、もう少し注意が必要です。以下で私のために働いた例:

OutputCacheManager om = new OutputCacheManager();
RouteValueDictionary rv = new RouteValueDictionary();                    
rv.Add("userlogin", User.Identity.Name);
om.RemoveItems("Customer", "UserProfile", rv);
于 2013-11-07T21:58:27.923 に答える