我们有一个多语言的网站,并且在用户登录后有一些个性化(例如标题显示不同的链接,用户的用户名等),但我们想要缓存特定的公共对象页面,这些页面是用户登录前的页面(例如,仅供浏览网站的用户)。
在ASP.NET 2.0站点中使用VaryByCustom时是否有办法考虑以下多个条件(是的,我们最终会升级,但现在不升级)以及如何将页面挂钩以将多个条件传递到方法?
这三种情况将允许我们缓存我们频繁访问的公共页面,并且不必计算内容/命中数据库或其他缓存以获取不经常更改的页面的菜单项等的来源。
非常感谢任何帮助。
谢谢,
答案 0 :(得分:0)
对于数字2和3,您可以使用以下
<%@ OutputCache Duration="Whatever you want in seconds" VaryByParam="*" VaryByCustom="browser"%>
对不起,我无法帮你解决第一个问题
答案 1 :(得分:0)
我建议覆盖Global.asax中的GetVaryByCustomString方法,根据上述三个标准创建自己的缓存密钥。
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" %>