微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。