2014-10-10 49 views
1

我有一个web应用程序(IIS7,.Net4.5,C#& webforms),并且激活了输出缓存。如果请求包含特定的头信息,请阻止outputcache

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

当前如果我使用VaryByHeaders,则会创建当前页面的输出缓存版本。如果它有很多网络流量,它可能是一个内存密集型的解决方案,并不适合我当前的解决方案。

有没有办法做到这一点?

谢谢!

回答

1

可以使用HttpCachePolicy.AddValidationCallback Method

的AddValidationCallback方法提供了一种机制以编程方式检查 响应的缓存由输出缓存返回 到客户端之前的响应。

在从Web服务器缓存提供响应之前,将查询所有 已注册的处理程序以确保资源有效性。如果任何 处理程序设置了一个标志,指示缓存的响应无效,则该条目被标记为无效并从缓存中排除。在这个 的情况下,以及当任何处理程序指示缓存响应 应该被忽略的请求,然后处理该请求,就好像 它是一个缓存未命中。

AddValidationCallback是在.NET Framework 3.5版中引入的。

在您的网站基本页面地址:

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; 
} 
+0

好了,谢谢你。但是,如果我没有“允许”在我的页面(?)中添加输出缓存指令。例如,如果访问者应该能够访问当前Web应用程序中的所有页面(而不是特定页面),那么我不希望将输出缓存指令放在我的主页面中。我想使用web.config设置,并实现这个没有页面指令...这是可能的某种方式? – user3154653 2014-10-10 21:00:16

+0

@ user3154653不是来自webconfig。你只能禁用该网站的所有输出缓存 – giammin 2014-10-10 21:04:34

+0

我的意思是,如果该网站是由'配置'(非页面指令)配置使用outputcache是​​可能的特定请求包含特定页眉信息为所有页面:1)不使用outputcache 2)不生成outputcached内容的当前页面,而不使用outputcache指令在页面和outputcache设置varybyheaders?即我可以在运行时编程式覆盖不使用outputcache和当前请求不创建输出缓存内容感谢您的帮助! – user3154653 2014-10-11 07:17:22