在ASP.NET中清除页面caching

对于我的博客,我想要使用输出caching来保存约10分钟的caching版本的perticular职位,这很好… … –

<%@OutputCache Duration="600" VaryByParam="*" %> 

但是,如果有人发表评论,我想清除caching,以便刷新页面,并可以看到评论。

我如何在ASP.Net C#中执行此操作?

我find了我正在寻找的答案:

 HttpResponse.RemoveOutputCacheItem("/caching/CacheForever.aspx"); 

如果您知道要清除caching的页面,以上方法都可以。 在我的实例(ASP.NET MVC)中,我引用了来自所有相同的数据。 因此,当我做了一个[保存]我想清除caching网站广泛。 这是我的工作: http : //aspalliance.com/668

这是在OnActionExecutingfilter的上下文中完成的。 这可以通过在BaseController中重写OnActionExecuting来完成。

 HttpContextBase httpContext = filterContext.HttpContext; httpContext.Response.AddCacheItemDependency("Pages"); 

build立:

 protected void Application_Start() { HttpRuntime.Cache.Insert("Pages", DateTime.Now); } 

小调整:我有一个助手,它增加了“闪光消息”(错误消息,成功消息 – “这个项目已成功保存”等)。 为了避免每一个后续的GET都出现闪存信息,我必须在写入闪存信息之后无效。

清除caching:

 HttpRuntime.Cache.Insert("Pages", DateTime.Now); 

希望这可以帮助。

使用Response.AddCacheItemDependency清除所有输出caching。

  public class Page : System.Web.UI.Page { protected override void OnLoad(EventArgs e) { try { string cacheKey = "cacheKey"; object cache = HttpContext.Current.Cache[cacheKey]; if (cache == null) { HttpContext.Current.Cache[cacheKey] = DateTime.UtcNow.ToString(); } Response.AddCacheItemDependency(cacheKey); } catch (Exception ex) { throw new SystemException(ex.Message); } base.OnLoad(e); } } // Clear All OutPutCache Method public void ClearAllOutPutCache() { string cacheKey = "cacheKey"; HttpContext.Cache.Remove(cacheKey); } 

这也可以在ASP.NET MVC的OutputCachedPage中使用。

在母版页加载事件上,请写下以下内容:

 Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1)); Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.Cache.SetNoStore(); 

并在注销button中单击:

 Session.Abandon(); Session.Clear(); 

嗯。 您可以在OutputCache项目上指定VaryByCustom属性。 这个值作为parameter passing给你可以在global.asax中实现的GetVaryByCustomString方法。 此方法返回的值用作caching项目的索引 – 例如,如果您返回页面上的评论数量,则每次添加评论时都会caching新页面。

对此的警告是,这实际上并没有清除caching。 如果博客条目获得大量的评论用量,那么您的caching可能会使用此方法大小爆炸。

或者,您可以实现页面(导航,广告,实际的博客条目)的不可更改位作为用户控件,并在每个用户控件上实现部分页面caching。

如果您将“*”更改为caching应该在(PostID?)上变化的参数,则可以这样做:

 //add dependency string key = "post.aspx?id=" + PostID.ToString(); Cache[key] = new object(); Response.AddCacheItemDependency(key); 

当有人添加评论…

 Cache.Remove(key); 

我猜这甚至会用VaryByParam *,因为所有的请求都被绑定到相同的caching依赖。

为什么不在posts表上使用sqlcachedependency?

sqlcachedependency msdn

这样你没有实现自定义caching清理代码,只是刷新caching随着内容在数据库中的变化?

HttpRuntime.Close() ..我尝试所有的方法,这是唯一的工作对我来说