Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 清除ASP.NET中的页面缓存_C#_Asp.net_Outputcache - Fatal编程技术网

C# 清除ASP.NET中的页面缓存

C# 清除ASP.NET中的页面缓存,c#,asp.net,outputcache,C#,Asp.net,Outputcache,对于我的博客,我想使用输出缓存来保存一篇特定文章的缓存版本大约10分钟,这很好 <%@OutputCache Duration="600" VaryByParam="*" %> 但是,如果有人发表评论,我希望清除缓存,以便刷新页面并查看评论 如何在ASP.Net C#?Hmm中执行此操作。您可以在OutputCache项上指定VaryByCustom属性。它的值作为参数传递给可以在global.asax中实现的GetVaryByCustomString方法。此方法返回的值用作缓

对于我的博客,我想使用输出缓存来保存一篇特定文章的缓存版本大约10分钟,这很好

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

但是,如果有人发表评论,我希望清除缓存,以便刷新页面并查看评论


如何在ASP.Net C#?

Hmm中执行此操作。您可以在OutputCache项上指定VaryByCustom属性。它的值作为参数传递给可以在global.asax中实现的GetVaryByCustomString方法。此方法返回的值用作缓存项的索引-例如,如果返回页面上的注释数,则每次添加注释时,都会缓存一个新页面

需要注意的是,这实际上并没有清除缓存。如果一个博客条目的评论使用率很高,那么使用这种方法,您的缓存可能会急剧膨胀

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

如果您将“*”更改为缓存应更改的参数(PostID?),您可以执行以下操作:

//add dependency
string key = "post.aspx?id=" + PostID.ToString();
Cache[key] = new object();
Response.AddCacheItemDependency(key);
当有人添加评论时

Cache.Remove(key);

我想这甚至适用于VaryByParam*,因为所有请求都将绑定到同一个缓存依赖项。

我找到了我想要的答案:

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

使用Response.AddCacheItemDependency清除所有输出缓存

  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中使用。

为什么不在posts表上使用sqlcachedependency


通过这种方式,您不需要实现自定义缓存清除代码,只需在数据库中的内容发生更改时刷新缓存即可。

如果您知道要清除缓存的页面,则上述操作就可以了。在我的实例(ASP.NETMVC)中,我引用了来自世界各地的相同数据。因此,当我执行[save]时,我想清除整个站点的缓存。这就是我的工作原理:

这是在OnActionExecuting筛选器的上下文中完成的。通过重写BaseController或其他程序中执行的OnActionExecuting,同样可以轻松完成

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

protected void Application_Start()
{
    HttpRuntime.Cache.Insert("Pages", DateTime.Now);
}
小调整: 我有一个助手,它添加了“flash消息”(错误消息、成功消息-“此项目已成功保存”等)。为了避免flash消息在每次后续GET中出现,我必须在写入flash消息后使其无效

正在清除缓存:

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

希望这能有所帮助。

HttpRuntime.Close()
。。我尝试了所有方法,这是母版页加载事件中唯一适合我的方法,请编写以下内容:

Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();
然后在注销按钮中单击:

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

有人知道这样的东西是否适用于经典ASP吗?我不认为ASP中有缓存,所以不抱歉。这会清除该页面每个参数的所有缓存。我使用的是MVC 5.2.3,我应该在哪里编写此代码?我使用的是用于动态菜单的web用户控件,我正在使用outputcache并希望在注销时删除缓存,我使用了您的解决方案并传递了我的用户控件的路径,但对我无效。我怀疑这将关闭IIS上的ASP.NET应用程序进程。这似乎有点过分,可能会清除所有缓存,并且在大型网站上会有严重的性能问题。Ir仅适用于整个页面缓存。它不适用于儿童行为。有什么建议吗?and.maz你找到了吗?@and.maz如果你找到了如何处理儿童行为的方法,那就是悬赏。这对我不起作用。无法清除缓存元素似乎是MVC中的一个巨大缺点。很可能,您无法清除缓存,因为您使用@Html.Action()来呈现局部视图。您必须使用
OutputCacheAttribute.ChildActionCache=new MemoryCache(“NewRandomStringNameToClearCache”)
清除整个“子操作缓存”(对于所有子操作-似乎没有更好的方法不使用库)。太好了,这就是我要找的。只有一件事你应该改变。HttpContext.Current.Cache.Remove(cacheKey);