从MVC控制器中删除OutputCache

时间:2014-07-02 15:42:49

标签: asp.net-mvc outputcache jsonresult output-caching

我试图弄清楚为什么outputCache没有被清除以下内容 建立。

我检查过的每个链接都清除了一个outputCacheItem,只是调用了RemoveOutputCacheItem(string)方法。但是我发现事实并非如此。我在调试器中获取了一次方法,它转到ClearCacheName(),运行删除。之后我再也没有打过这个方法,告诉我缓存卡住了,因此结果集永远是null。

        [OutputCache(Duration = int.MaxValue, Location = OutputCacheLocation.Server)]
    public JsonResult GetNames()
    {
        if (SomeResultSet != null)
        {
            var results =
                SomeResultSet
                    .Where(x => x.LookupName != null)
                    .OrderBy(x => x.LookupName)
                    .Select(x => new
                    {
                        value = x.LookupName,
                        label = x.LookupName

                    }).Distinct();

            return new JsonResult() {Data = results, JsonRequestBehavior = JsonRequestBehavior.AllowGet};
        }
        ClearCacheNames();
        return null;
    }

    private void ClearCacheNames()
    {
      //  OutputCacheAttribute.ChildActionCache = new MemoryCache(new Guid().ToString());
       Response.RemoveOutputCacheItem(Url.Action("GetNames","Search",null));
    }

1 个答案:

答案 0 :(得分:0)

问题在于缓存的方法是输出。在该方法清除缓存后,将生成并缓存输出。所以你什么都不做。

要实现您想要做的事情,您不应该缓存输出,但在操作中使用System.Web.Caching.Cache,并缓存数据。

您也可以尝试使用过滤器,但必须创建一个在OutputCache过滤器之后运行的过滤器,并为其提供清除缓存所需的信息。实施起来比较困难。