【问题标题】:OutputCache of user control not working用户控件的 OutputCache 不起作用
【发布时间】:2012-06-18 23:46:21
【问题描述】:

我有一个复杂的网站,它使用通过 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);
        }
    }

【问题讨论】:

  • 100% 确定,2 个不同的浏览器是指 2 个不同的浏览器版本,对吧?
  • 我在 Chrome 和 IE8 中打开它并得到相同的缓存版本

标签: .net caching sitefinity


【解决方案1】:

如果你正在使用

  <%@ 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 来处理它?

【讨论】:

  • 不,我在重载中唯一要做的就是检查它是否是我们的自定义值,否则我将控制权返回给基本方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多