如何使用页面OutputCache和VaryByCustom来考虑ASP.NET 2.0+中的多个条件?

| 我们有一个多语言的网站,并且在用户登录后具有某些个性化设置(例如,标题显示不同的链接,用户的用户名等),但是我们希望缓存特定的面向公众的页面,用户登录之前页面的版本(例如,对于仅浏览该网站的人)。 在ASP.NET 2.0站点中使用VaryByCustom时,是否有一种方法可以考虑以下多个条件(是的,我们最终会升级,但不是现在),您将如何挂接页面以将多个条件传递给方法? 自定义ASP.NET成员资格配置文件 属性称为 Profile.Preferences.Language(我们 将检查URL方案并设置 语言属性设置为有效 VaryByCustom之前的值)。 用户的浏览器 任何查询字符串/参数 这三种情况将使我们能够缓存我们经常访问的公共页面,而不必计算事物/命中数据库或其他缓存来获取不经常更改的页面的菜单项等。 任何帮助将不胜感激。 谢谢,     
已邀请:
对于数字2和3,您可以使用以下代码
<%@ OutputCache Duration=\"Whatever you want in seconds\" VaryByParam=\"*\" VaryByCustom=\"browser\"%>
对不起,我不能帮你第一个     
我建议重写Global.asax中的GetVaryByCustomString方法,以根据上述三个条件创建自己的cachekey。
public override string GetVaryByCustomString(HttpContext context, string arg)
{
    const string KEY = \"UserSpecific\";
    if (arg == KEY) {
         //perform some logic to generate a unique key per querystring, brower and profile
         string cacheKey = context.Request.QueryString[\"someparam\"] + ...
         return cacheKey;
     }

    return base.GetVaryByCustomString(context, arg);
}
并修改outputcache指令以利用此新的cachekey生成逻辑。
<%@ OutputCache Duration=\"300\" VaryByParam=\"none\" VaryByCustom=\"UserSpecific\" %>
    

要回复问题请先登录注册