ASP NET MVC-默认情况下全局禁用OutputCache

问题描述

我有一个ASP .NET MVC 4应用程序。我想为所有操作返回默认情况下未设置存储的缓存控制响应标头,如果它们要缓存结果,则允许某些特定的ceratin端点例外。为了实现这一点,我尝试在Application_Start()上为NoStore属性设置为true的所有操作注册OutputCacheAttribute。然后,如果希望控制器或操作缓存结果,则可以通过用OutputCacheAttribute装饰控制器或操作来破坏全局设置。以下是我的应用程序中的简化代码示例。我一切都基于这篇帖子https://forums.asp.net/t/2146531.aspx?Disable+cache+in+ASPNET+MVC

public class MvcApplication : System.Web.HttpApplication
{
   protected MvcApplication() : base()
   {
   }
 
   protected void Application_Start()
   {
      GlobalFilters.Filters.Add(new OutputCacheAttribute
      {
         VaryByParam = "*",Duration = 0,NoStore = true,});
   }
        
}

但是,当我输入包含部分视图的视图时,应用程序将引发以下异常:

enter image description here

如果我甚至不想缓存结果,为什么还要设置持续时间?而且看起来子操作不支持传递NoStore属性:Asp.Net MVC 3 Partial Page Output Caching Not Honoring Config Settings

我也尝试制作自己的动作过滤器,它似乎可以正常工作,但是我不太喜欢这种方法,而且我也不知道是否有可能在控制器上覆盖我的自定义属性或动作级别:

public class NoCacheGlobalAttribute : ActionFilterAttribute
{
   public override void OnResultExecuted(ResultExecutedContext filterContext)
   {
      var cache = filterContext.HttpContext.Response.Cache;
      cache.SetNoStore();
      cache.SetMaxAge(TimeSpan.FromSeconds(0));
   }
}

有什么办法可以像我上面描述的那样利用现有的OutputCacheAttribute?我希望默认情况下禁用所有操作的缓存,并且如果需要,可以启用某些端点的缓存。如果没有,您还有其他提示吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...