如果请求包含特定的header-info,则阻止outputcache

时间:2014-10-10 19:38:39

标签: c# asp.net outputcache

我有一个webapplication(IIS7,.Net4.5,C#和webforms),并且激活了输出缓存。

输出缓存工作正常,除了某些包含特定标题信息的请求我不想点击已经输出的缓存内容,即请求必须达到应用程序业务代码页面加载等。 对于具有特定标题信息的当前请求,我不想生成新的outputcached内容,但输出缓存应该适用于正常请求'不包含特定的标题信息。

目前,如果我使用VaryByHeaders,将创建当前页面的outputcached版本。如果它有很多web-trafic,它可能是一个内存密集型解决方案,对我来说当前的解决方案不起作用。

有没有办法实现这个目标?

谢谢!

1 个答案:

答案 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;
}