我在我的 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 时。
所以在简历中:我想禁用任何缓存(来自浏览器)并且只缓存特定的操作(可能由属性标记)。
可能吗?
不管怎么说,还是要谢谢你。