Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果请求包含特定标头信息,则阻止outputcache_C#_Asp.net_Outputcache - Fatal编程技术网

C# 如果请求包含特定标头信息,则阻止outputcache

C# 如果请求包含特定标头信息,则阻止outputcache,c#,asp.net,outputcache,C#,Asp.net,Outputcache,我有一个webapplication(IIS7、.Net4.5、C#和webforms),输出缓存被激活 输出缓存运行良好,除了某些包含特定头信息的请求,我不想命中已输出缓存的内容,即请求必须命中应用程序业务代码页面加载等。 对于具有特定标头信息的当前请求,我不想生成新的outputcached内容,但输出缓存应适用于不包含特定标头信息的“正常请求” 当前,如果我使用VaryByHeaders,将创建当前页面的outputcached版本。如果这是一个大量的网络流量,它可以是一个内存密集型的解决

我有一个webapplication(IIS7、.Net4.5、C#和webforms),输出缓存被激活

输出缓存运行良好,除了某些包含特定头信息的请求,我不想命中已输出缓存的内容,即请求必须命中应用程序业务代码页面加载等。 对于具有特定标头信息的当前请求,我不想生成新的outputcached内容,但输出缓存应适用于不包含特定标头信息的“正常请求”

当前,如果我使用VaryByHeaders,将创建当前页面的outputcached版本。如果这是一个大量的网络流量,它可以是一个内存密集型的解决方案,这不适合我目前的解决方案

有没有办法做到这一点

谢谢

您可以使用

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

好的,谢谢。但如果我不被“允许”在页面(?)中添加输出缓存指令。例如,如果访问者应该能够访问当前web应用程序中的所有页面(而不是特定页面),那么我不想在母版页中放入输出缓存指令。我想使用web.config设置并在没有页面指令的情况下实现此功能。。。这在某种程度上可能吗?@user3154653不是来自webconfig。您只能禁用站点的所有输出缓存我的意思是,如果站点是通过“配置”(而不是页面指令)配置的要使用outputcache,是否可以对包含所有页面的特定标题信息的特定请求执行以下操作:1)不使用outputcache 2)在页面和outputcache设置varyHeaders中不使用outputcache指令的情况下,不为当前页面生成outputcache内容?i、 我可以在运行时编程重写以不使用outputcache,并且当前请求不会创建outputcache内容,谢谢您的帮助@用户3154653尝试此解决方案。非常适合你的情况