我遇到了页面级输出缓存问题,并且在我们的.NET 4.0 ASP.NET Web窗体应用程序中因自定义而异。
我们使用URL重写,因此我想根据原始URL更改缓存,因为不同的url映射到相同的aspx处理程序页面。 (例如/article-1.aspx和/article-2.aspx都由/articlepage.aspx处理)
我试过
<%@ OutputCache Duration="60" VaryByParam="None" VaryByCustom="RAWURL" Location="Server" %>
和
Response.Cache.SetValidUntilExpires(true);
Response.Cache.SetCacheability(HttpCacheability.Server);
Response.Cache.SetVaryByCustom("RAWURL");
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
我已禁用会话并检查我们是否未设置任何Cookie(在代码和Fiddler中)
当我删除VaryByCustom时,缓存有效,但由于URL重写,内容显然与URL不匹配。
GetVaryByCustomMethod很简单
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom == "RAWURL")
{
return context.Request.Current.RawUrl;
}
else
{
return base.GetVaryByCustomString(context, custom);
}
}
无论我在这个方法中放什么,即使我只是让它调用基类缓存停止工作。
我们成功地将此技术用于控制级输出缓存,它只是在页面级别上失败。
我创建了一个简单的网站并让VaryByCustom正常工作,因此该网站显然还有其它方法可以阻止它。
我可以做任何跟踪/记录来查看问题所在吗?