Для тех, кто может быть заинтересован, реализация довольно проста с 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
, а не на значение, полученное после распаковки.