我们有一个网站是多语言和有一些个性化后,用户登录(例如头显示不同的链接,用户的用户名等),但我们希望缓存特定的面向公众的网页,这是在用户登录之前的版本(例如,人们只是浏览网站)。
在VaryByCustom 2.0站点中使用ASP.NET时,是否有一种方法可以考虑到以下多个条件(是的,我们最终会升级,但不是现在),您将如何将一个页面连接起来以将多个条件传递到该方法中?
这三种情况将使我们能够缓存频繁被攻击的公共页面,而不必计算事物/访问DB或其他缓存,以获得菜单项的来源等,因为这些页面很少发生更改。
任何帮助都将不胜感激。
谢谢,
发布于 2011-05-24 21:24:31
对于2号和3号,您可以使用以下命令
<%@ OutputCache Duration="Whatever you want in seconds" VaryByParam="*" VaryByCustom="browser"%>抱歉,第一次我帮不了你
发布于 2011-05-25 00:56:10
我建议在GetVaryByCustomString中重写Global.asax方法,以便根据上述三个条件创建自己的缓存键。
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指令以利用这个新的缓存键生成逻辑。
<%@ OutputCache Duration="300" VaryByParam="none" VaryByCustom="UserSpecific" %>https://stackoverflow.com/questions/6111403
复制相似问题