列出OutputCache条目

时间:2010-07-01 10:07:05

标签: asp.net asp.net-mvc asp.net-mvc-2 caching outputcache

在我的asp.net mvc应用程序中,我在不同的操作方法上使用OutputCache属性。 是否可以查看与OutputCache属性相关的缓存中的当前条目? 如果我在System.Web.HttpContext.Current.Cache上发现我没有找到这种类型的条目。 在此先感谢F。

1 个答案:

答案 0 :(得分:11)

输出缓存无法公开访问,因此您无法在System.Web.HttpContext.Current.Cache中找到它。在ASP.NET 2中,它包含在CacheInternal的{​​{1}}成员中,您可以通过名称猜测该成员是内部抽象类的私有成员。 虽然这不是一件容易的事,但可以通过反射来检索它。

另外,如果你检索它,你会看到它包含各种内部缓存条目,如配置文件路径缓存,动态生成的类缓存,移动功能,原始响应缓存(这一个是输出缓存项的类型)

假设您可以过滤与输出缓存相关的项目。问题是除了密钥和原始响应(作为字节数组)之外,它们不包含很多人类可读的信息。密钥通常由我使用的GET(a1)或POST(a2)方法,站点名称,根相对url和依赖参数的哈希信息组成。

我想这是一个常见的痛点,因此在ASP.NET 4中引入了自定义输出缓存提供程序的新概念。您可以实现从OutputCacheProvider继承的自己的输出缓存提供程序,并提供返回所有条目的方法。你可以查看这篇文章 - http://weblogs.asp.net/gunnarpeipman/archive/2009/11/19/asp-net-4-0-writing-custom-output-cache-providers.aspx。我个人没有看过新的OutputCache基础设施,所以如果你发现任何东西,那么写一下它会很有趣。

这是检索内部缓存条目的代码。您可以在Visual Studio中调试时浏览它们的值:

_caches