在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()
..我尝试所有的方法,这是唯一的工作对我来说