我有一个webapplication(IIS7,.Net4.5,C#和webforms),并且激活了输出缓存。
输出缓存工作正常,除了某些包含特定标题信息的请求我不想点击已经输出的缓存内容,即请求必须达到应用程序业务代码页面加载等。 对于具有特定标题信息的当前请求,我不想生成新的outputcached内容,但输出缓存应该适用于正常请求'不包含特定的标题信息。
目前,如果我使用VaryByHeaders,将创建当前页面的outputcached版本。如果它有很多web-trafic,它可能是一个内存密集型解决方案,对我来说当前的解决方案不起作用。
有没有办法实现这个目标?
谢谢!
答案 0 :(得分:1)
您可以使用HttpCachePolicy.AddValidationCallback Method
AddValidationCallback方法提供了一种检查机制 在返回响应之前以编程方式在缓存中响应 通过输出缓存到客户端。
在从Web服务器缓存提供响应之前,全部 查询注册处理程序以确保资源有效性。如果有的话 handler设置一个标志,指示缓存的响应无效, 该条目被标记为无效并从缓存中排除。在这 case,以及任何处理程序指示缓存的响应时 应该忽略此请求,然后处理请求,就好像 这是一个缓存未命中。
在.NET Framework 3.5版中引入了AddValidationCallback。
在您的网站基页中添加:
public void Page_Load()
{
Response.Cache.AddValidationCallback(new HttpCacheValidateHandler(ValidateCache), null);
}
public static void ValidateCache(HttpContext context, Object data, ref HttpValidationStatus status)
{
validationstatus = context.Request.Headers["myheaders"]=="nocache" ? HttpValidationStatus.IgnoreThisRequest : HttpValidationStatus.Valid;
}