我对ASP.Net或Composite C1 CMS中的outputcache工作有以下问题(不知道问题出在哪里):
我需要通过名为“City”的cookie来改变缓存。在Global.asax中,我重写了GetVaryByCustomString方法。
public override string GetVaryByCustomString(HttpContext context, string custom)
{
var result = ApplicationLevelEventHandlers.GetVaryByCustomString(context, custom);
if (result == null) {
return base.GetVaryByCustomString(context, custom);
}
HttpCookie cookie = context.Request.Cookies["City"];
string additionalVary = "";
if (cookie != null)
additionalVary = cookie.Value;
else
additionalVary = "Москва";
return String.Concat(result, additionalVary);
}
问题是:我重写的GetVaryByCustomString方法的断点仅在第一次请求页面时被命中,但在缓存实际到期之前没有被下一次请求命中(在我的情况下为60秒)。 虽然在60秒内cookie可能已在客户端更改 - 但页面只是从缓存中获取。
我哪里错了? 提前谢谢。
更新 我终于能够通过CacheProfile设置中的以下修改使得outputcache因cookie而异:
<outputCacheProfiles>
<add name="C1Page" duration="60" varyByCustom="C1Page" varyByParam="*" varyByHeader="Cookie" location="Server" />
</outputCacheProfiles>
在这种情况下,每个请求都会遇到GetVaryByCustomString方法,但不需要它:这些设置会使缓存因网站上可能设置的每个cookie而异。当然,这不是一种理想的行为 - 这就是我继续调查的原因。
更有趣的是 - 这两个参数(varyByHeader =“Cookie”和位置=“服务器”)只能一起工作,禁用其中一个使事情看起来与之前完全一样 - outputcache没有变化。
答案 0 :(得分:0)
尝试给Application_BeginRequest设置一个断点,可能是浏览器没有提出请求,而是显示一个缓存页面。