1

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 が呼び出されるたびに機能しないためです。

履歴書で:(ブラウザからの)キャッシュを無効にし、特定のアクション(おそらく属性でマークされている)のみをキャッシュしたいと思います。

出来ますか?

とにかくありがとう。

4

1 に答える 1

0

属性を GlobalFilterCollection に追加するだけです

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new DisableCacheFilter());
        filters.Add(new EnableCacheAttribute ());
    }
于 2016-12-02T13:45:41.840 に答える