2010-12-10 11 views
8

ASP.NET 4.0/IIS7 Webアプリケーションの場合、圧縮されたHTTP 要求をサポートしたいと思います。基本的には、要求ヘッダーにContent-Encoding: gzipを追加し、それに応じて本文を圧縮するクライアントをサポートしたいと思います。Asp.Net 4.0/IIS7で圧縮されたHTTP要求をサポートするには?

どのように私はこのような振る舞いを達成したのですか?

Ps:私は複数のエンドポイントRESTとSOAPを持っていますが、各エンドポイントのカスタムエンコーダーではなく、HTTPレベルでの圧縮をサポートするためのより良いソリューションを感じています。

答えて

5

興味のある人にとっては、実装は着信要求を単純にフィルタリングする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は、元Content-Lengthなく解凍した後に得られた値に依存しているとして、このアプローチは、WCFで問題を誘発することが表示されます。

+0

私は、ホストされているアプリケーションではなく、IISレベルで圧縮を設定できるとの印象を受けました。しかし、私はあまり知られていない、単なる提案のGoogle "IIS圧縮" – e36M3

+2

古典的なHTTP圧縮は、**応答**にのみ適用されます、ここでは**要求です**圧縮しようとしています。 –

+0

ここに新しいものはありますか? – ver

関連する問題