0

我一直试图弄清楚为什么 outputCache 在以下设置中没有被清除。

几乎我检查过的每个链接以清除 outputCacheItem 都说只调用 RemoveOutputCacheItem(string) 方法。但是我发现情况并非如此。我在调试器中得到该方法一次,它转到 ClearCacheName(),运行删除。之后我再也没有点击该方法,告诉我缓存被卡住了,因此结果集永远为空。

        [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));
    }
4

1 回答 1

0

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

为了实现你想要做的事情,你不应该缓存输出,而是System.Web.Caching.Cache在动作内部使用,并缓存数据。

您也可以尝试使用过滤器来执行此操作,但您必须创建一个在过滤器之后运行的OutputCache过滤器,并为其提供必要的信息以清除缓存。实施起来更难。

于 2014-07-02T16:38:38.143 回答