MVC按页面删除缓存

时间:2014-06-17 15:26:58

标签: asp.net-mvc-4 caching

我已经为我的网站添加了一些缓存,但希望创建一种方法来清除一个页面上的缓存。我环顾四周,尝试了以下但没有一个工作:

HttpContext.Cache.Remove( Response.RemoveOutputCacheItem(Request.RawUrl); HttpResponse.RemoveOutputCacheItem(Request.RawUrl)

有没有人知道如何做到这一点或我出错的地方?我在web.config中创建了我的缓存配置文件:

                                                                                

2 个答案:

答案 0 :(得分:0)

使用http方法应该适用于此,您确定已在方法中正确链接相关的URL /文件吗?

只有输入了正确的路由参数后,RemoveOutputCacheItem才有效。例如,您不能在方法中使用查询。您是否可以通过迄今为止的尝试更新您的问题,以便更清楚地了解出现了什么问题?

关于你能做什么的例子是这样声明一个路线定义:

route.MapRoute(
                "default",
                "[controller]/[action]/[page_id]"
              ) 

因为现在宣布了这个,你应该可以通过:

来调用它
    public ActionResult EmptyCache(Guid page_Id)
    {

        var url = Url.Action("SpecificPage", "default", new {   page_id=pageid   } );
        // the url will therefore be like this: /default/Specificpage/page_id
        HttpResponse.RemoveOutputCacheItem(url);
        return RedirectToAction("Index");
    }


<强>更新

确保您没有使用的方法因此将当前缓存转换为子操作。例如,如果您使用诸如Html.RenderAction之类的方法,则在将其作为其子项之后将导致操作。这些缓存在不同的位置,因此removeoutputcacheitem帮助程序将无法工作。

答案 1 :(得分:0)

访问:How to clear MemoryCache?

使用[OutPutCacheAttribute]

你可以使用

List<string> cacheKeys = MemoryCache.Default.Select(kvp => kvp.Key).ToList();
foreach (string cacheKey in cacheKeys)
{
  MemoryCache.Default.Remove(cacheKey);
}