0

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

1 回答 1

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

于 2012-06-16T00:05:40.813 回答