用户控件的OutputCache无法正常工作

时间:2012-06-15 21:43:07

标签: .net caching sitefinity

我有一个复杂的网站,它使用通过Sitefinity启用的.NET输出缓存。最近我们需要根据用户位置让特定用户控件具有不同的缓存版本。因此,我为用户控件提供了一个设置了VaryByCustom的OutputCache指令,并覆盖了Global.asax中的GetVaryByCustomString方法以获取用户位置。问题是即使在一个简单的测试案例中,这也是行不通的。我们在Sitefinity的上下文之外测试了这个用例,通过创建一个包含.aspx页面的新项目并在其中放置一个新的.ascx用户控件来验证它是否是导致问题的。该页面有一个标签,可以获取当前加载时间以及控件。该控件还具有呈现当前时间的标签。如果我将OutputCache页面设置为:

<%@ OutputCache Duration="60" VaryByParam="none" %>

并将控件设置为:

<%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser" %>

预期的功能不会发生。我们的想法是,如果我们在两个不同的浏览器中打开此页面,我们会在第二个标签中看到两个不同的时间。我在这里完全遗漏了什么吗?我是处理.NET缓存的新手,所以完全有可能。

由于

这是我对GetVaryByCustomString的重写:

    public override string GetVaryByCustomString(HttpContext context, string custom)
    {
        if (custom == "custom")
        {
            // return custom logic
        }
        else
        {
            return base.GetVaryByCustomString(context, custom);
        }
    }

1 个答案:

答案 0 :(得分:0)

如果您正在使用

  <%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser" %>

然后,对于具有不同主要版本+浏览器类型的每个浏览器,缓存应该是不同的。所以Firefox 3.5.0和Firefox 3.6.0应该看到相同,但Firefox 3.5和Firefox 2.0应该看到不同。

我假设你没有意外地在global.asmx中重载HttpApplication.GetVaryByCustomString来处理浏览器而不是允许.NET这样做?