我在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。
所以在简历中:我想禁用任何缓存(来自浏览器),只缓存特定的操作(可能由属性标记)。
有可能吗?
非常感谢。
答案 0 :(得分:0)
您只需将该属性添加到GlobalFilterCollection
即可public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new DisableCacheFilter());
filters.Add(new EnableCacheAttribute ());
}