为什么HttpContext.Cache计数总是为零?

时间:2010-04-12 22:05:57

标签: asp.net-mvc model-view-controller caching

我使用OutputCache配置文件设置了几个页面,并确认它们是通过使用多个浏览器进行缓存的,并请求检索具有与所有请求匹配的时间戳的页面。当我尝试枚举HttpContect.Cache时,它总是空的。

任何想法在这里发生了什么,或者我应该在哪里找到这些信息呢?

更新

这不是客户端缓存,因为多个浏览器看到相同的响应。这里有一些代码可以解释发生了什么。

Web.Config缓存设置

<system.web>
    <caching>
        <outputCacheSettings>
            <outputCacheProfiles>
                <clear/>
                <add name="StaticContent" duration="1200" varyByParam="none"/>
                <add name="VaryByParam" duration="1200" varyByParam="*"/>
            </outputCacheProfiles>
        </outputCacheSettings>
    </caching>
     ...
</system.web>

**缓存操作方法

[OutputCache(CacheProfile = "StaticContent")]
public ActionResult Index()
{
    return View(new CollaborateModel());
}

用于枚举缓存的代码,是的,它是粗略的,这是在控制器操作方法中定义的

    var sb = new StringBuilder();

    foreach (KeyValuePair<string, object> item in HttpContext.Cache)
    {
        sb.AppendFormat("{0} : {1}<br />", item.Key, item.Value.ToString());
    }

    ViewData.Add("CacheContents", sb.ToString());

HttpContext.Cache是​​count始终为null的地方,即使缓存似乎工作正常。

2 个答案:

答案 0 :(得分:0)

这可能是因为页面已经缓存在客户端浏览器的下游而不是服务器上。

答案 1 :(得分:0)

我没有使用HttpCache,而是使用我自己的缓存模型来保存数据访问层中的数据集。如果我查找给定用户名的AD配置文件并将其转换为DTO,那么我只是将该配置文件放在轮廓DTO的滚动集合中,我将在轮询AD之前检查该信息。