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