我有一个 IHttpHandler 返回一个文件。当响应流被压缩时,要么自动使用 Telerik RadCompression 要么通过使用显式设置过滤器
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
返回到浏览器的响应是正确的,但响应的末尾是一些 HTML。 HTML 包含异常:
[HttpException (0x80004005): Invalid use of response filter]
System.Web.HttpResponseStreamFilterSink.VerifyState() +3928894
System.Web.HttpResponseStreamFilterSink.Write(Byte[] buffer, Int32 offset, Int32 count) +28
System.IO.Compression.DeflateStream.Dispose(Boolean disposing) +363
System.IO.Stream.Close() +28
System.IO.Compression.GZipStream.Dispose(Boolean disposing) +63
System.IO.Stream.Close() +28
System.IO.Compression.DeflateStream.Dispose(Boolean disposing) +595
System.IO.Stream.Close() +28
System.IO.Compression.GZipStream.Dispose(Boolean disposing) +63
System.IO.Stream.Close() +28
System.Web.HttpWriter.FilterIntegrated(Boolean finalFiltering, IIS7WorkerRequest wr) +754
System.Web.HttpResponse.FilterOutput() +121
System.Web.CallFilterExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +174
如果我确保响应未压缩,则响应不包含异常。
那是怎么回事?
确保您没有阻止缓冲。显然,要压缩响应,您必须允许对其进行缓冲。
即,需要删除以下两行之一:
context.Response.BufferOutput = false;
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)