Visual Studio 2012 ASP.NET MVC4 ソリューションに取り組んでいます。私はキャッシングの部分で忙しいです。属性でマークされた特定のアクションを除いて、アクションコントローラーをキャッシュしたくありません。
これが私がすることです:
アクション フィルターを定義しました。
public class DisableCacheFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// Without caching
filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
filterContext.HttpContext.Response.Cache.SetNoStore();
}
}
したがって、アクションがトリガーされるたびに、次にこのアクションがトリガーされるときのためにキャッシュしません。
次に、このフィルターを Global.asax に登録します。
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new DisableCacheFilter());
}
次に、EnableCache 属性を作成しました。
public class EnableCacheAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// With caching of one day
filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(1));
filterContext.HttpContext.Response.Cache.SetValidUntilExpires(true);
filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.Public);
}
}
したがって、現在のアクションが EnableCache 属性で装飾されているときはいつでも、それをキャッシュしたいと思います。そのため、次に同じアクションが (クライアント ブラウザーから) トリガーされたときに、呼び出しは行われません。
例:
[EnableCache]
public JsonResult GetPostCode(int countryID, string term)
{
....
}
フィルター DisableCache が呼び出されるたびに機能しないためです。
履歴書で:(ブラウザからの)キャッシュを無効にし、特定のアクション(おそらく属性でマークされている)のみをキャッシュしたいと思います。
出来ますか?
とにかくありがとう。