【问题标题】:"Invalid use of response filter" when compressing response from an IHttpHandler压缩来自 IHttpHandler 的响应时“无效使用响应过滤器”
【发布时间】:2011-01-25 19:18:33
【问题描述】:

我有一个返回文件的 IHttpHandler。当响应流被压缩时,要么自动使用 Telerik RadCompression,要么使用

显式设置过滤器 context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);

返回给浏览器的响应是正确的,但在响应的末尾是一些 HTML。 HTML 包含异常:

[HttpException(0x80004005):响应过滤器的使用无效] System.Web.HttpResponseStreamFilterSink.VerifyState() +3928894 System.Web.HttpResponseStreamFilterSink.Write(Byte[] buffer, Int32 offset, Int32 count) +28 System.IO.Compression.DeflateStream.Dispose(布尔处理)+363 System.IO.Stream.Close() +28 System.IO.Compression.GZipStream.Dispose(布尔处理)+63 System.IO.Stream.Close() +28 System.IO.Compression.DeflateStream.Dispose(布尔处理)+595 System.IO.Stream.Close() +28 System.IO.Compression.GZipStream.Dispose(布尔处理)+63 System.IO.Stream.Close() +28 System.Web.HttpWriter.FilterIntegrated(布尔 finalFiltering,IIS7WorkerRequest WR)+754 System.Web.HttpResponse.FilterOutput() +121 System.Web.CallFilterExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +174

如果我确保响应未压缩,则响应不包含异常。

这是怎么回事?

【问题讨论】:

    标签: asp.net gzip ihttphandler gzipstream


    【解决方案1】:

    确保您没有阻止缓冲。显然,要压缩响应,您必须允许它被缓冲。

    即需要删除以下两行之一:

    context.Response.BufferOutput = false;
    context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      • 2016-06-29
      相关资源
      最近更新 更多