在ASP.NET MVC中,默认情况下是启用输出缓存的。如果您想禁用全局输出缓存,您可以在全局过滤器中注册一个自定义的输出缓存过滤器,如下所示:
首先,创建一个名为DisableCacheAttribute
的自定义输出缓存过滤器类,如下所示:
public class DisableCacheAttribute : ActionFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
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();
base.OnResultExecuting(filterContext);
}
}
然后,在全局过滤器配置中注册该输出缓存过滤器,如下所示:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new DisableCacheAttribute());
// 其他全局过滤器
}
}
最后,在Global.asax.cs
文件中的Application_Start
方法中调用FilterConfig.RegisterGlobalFilters
方法,如下所示:
protected void Application_Start()
{
// 其他代码
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
}
这样,每个控制器的每个动作都会禁用输出缓存。如果您只想禁用某个控制器或动作的输出缓存,可以在相应的控制器或动作上应用[DisableCache]
特性。