我试图弄清楚为什么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));
}
答案 0 :(得分:0)
问题在于缓存的方法是输出。在该方法清除缓存后,将生成并缓存输出。所以你什么都不做。
要实现您想要做的事情,您不应该缓存输出,但在操作中使用System.Web.Caching.Cache
,并缓存数据。
您也可以尝试使用过滤器,但必须创建一个在OutputCache
过滤器之后运行的过滤器,并为其提供清除缓存所需的信息。实施起来比较困难。