对于ASP.NET 4.0 / IIS7 Web应用程序,我想支持压缩的HTTP请求.基本上,我想支持在请求标头中添加Content-Encoding:gzip的客户端,并相应地压缩主体.
有谁知道我是如何实现这种行为的?
Ps:关于,我有多个端点REST和SOAP,它感觉更好的解决方案来支持HTTP级别的压缩,而不是每个端点的自定义编码器.
解决方法
对于那些可能感兴趣的人来说,IHttpModule只是简单地过滤传入的请求,实现起来相当简单.
public class GZipDecompressModule : IHttpModule { public void Init(HttpApplication context) { context.BeginRequest += BeginRequest; } void BeginRequest(object sender,EventArgs e) { var app = (HttpApplication)sender; if ("gzip" == app.Request.Headers["Content-Encoding"]) { app.Request.Filter = new GZipStream( app.Request.Filter,CompressionMode.Decompress); } } public void Dispose() { } }
更新:此方法似乎在WCF中触发了问题,因为WCF依赖于原始Content-Length而不是解压缩后获得的值.