約20個のコントローラーを備えたMVCアプリケーションがあります。
このアプリケーションでは、特定のビュー(ほとんどの場合部分的)を60秒間キャッシュしたいと考えています。つまり、基になるデータが1分間に変更された場合でも、結果は1分間に1回だけ変更されます。
簡単そうです。
複雑なのは、パーシャルが現在ログインしているユーザーに応じて異なるデータを表示することです。MVC3を使用して、キャッシュがユーザーごとにあることを確認するにはどうすればよいですか?
約20個のコントローラーを備えたMVCアプリケーションがあります。
このアプリケーションでは、特定のビュー(ほとんどの場合部分的)を60秒間キャッシュしたいと考えています。つまり、基になるデータが1分間に変更された場合でも、結果は1分間に1回だけ変更されます。
簡単そうです。
複雑なのは、パーシャルが現在ログインしているユーザーに応じて異なるデータを表示することです。MVC3を使用して、キャッシュがユーザーごとにあることを確認するにはどうすればよいですか?
OutputCacheAttribute
コントローラまたはアクションごとに出力キャッシュに影響を与えるために使用でき、を使用できますVaryByCustom
。
[OutputCache(Duration = 60, VaryByParam = "*", VaryByCustom="userName")]
それをコントローラーに配置し、Global.asax.csに移動して、以下をオーバーライドしますGetVaryByCustomString
。
public override string GetVaryByCustomString(HttpContext context, string arg)
{
if(arg.ToLower() == “username” && context.User.Identity.IsAuthenticated) return context.User.Identity.Name;
return base.GetVaryByCustomString(context, arg);
}