2017-02-06 11 views
2

私はこの1つのPOSTメソッドを持つ.Net Web API(2)を作成しています。このメソッドは現在、標準のJSONフォーマッタを使用してパラメータを逆シリアル化しています。また、System.Net.Http.HttpClientを使用してこのApi a C#Clientを使用して通信するクライアントを作成しています。.Net Web API 2 POSTで消費されるgzip圧縮コンテンツ

大量のデータを移動する可能性があります。これにより、リクエストのフットプリントを減らすことができました。

このサイトを検索した後、gzip圧縮を使用していくつかの選択肢を見つけました。私はすでにコンセプトの作業証拠がありますので、this

、私の質問のラインダウンthis

  • サーバー側に何かのラインダウン

    • クライアント側の何かを...

      本当にこのカスタムコードをすべて記述する必要はありますか?要求のフットプリントを減らすための方法が組み込まれていますか?

      IISでgzip(またはdeflate)を有効にすることに関して言及された記事がいくつかあります(Enable IIS7 gzipを参照)。これは私のために働いていませんでした(私はそれを有効にしました、私は依然としてクライアント側で圧縮を行い、サーバーからDelegatingHandlerを削除しました...しかし、何もせず、コントローラメソッドでnullパラメータになります)

  • +1

    この問題の解決策を見つけましたか? – Jerome2606

    +0

    箱からすぐには何もありません。私の投稿に追加したリンクに続いて、コンテンツエンコーディング "gzip"ヘッダーが存在する場合、要求を解凍するDelegatingHandlerの実装が終了しました。 (SendAsyncを上書きする)。 – qazcde

    答えて

    1

    私は、DelegatingHandlerを実装し、ContentEncoding "gzip"でヘッダを探し出し、それに応じて圧縮解除しました。

    using System; 
    using System.Linq; 
    using System.Net.Http; 
    using System.Threading; 
    using System.Threading.Tasks; 
    
    namespace WebApi.MessageHandlers 
    { 
        /// <summary> 
        /// GZip message handler. 
        /// </summary> 
        public class GZipMessageHandler : DelegatingHandler 
        { 
         protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
         { 
          if (IsRequestCompressed(request)) 
          { 
           request.Content = Descompress(request.Content); 
          } 
          return base.SendAsync(request, cancellationToken); 
         } 
    
         private bool IsRequestCompressed(HttpRequestMessage request) 
         { 
          return request.Content.Headers.ContentEncoding.Contains("gzip", StringComparer.OrdinalIgnoreCase); 
         } 
    
         private HttpContent Descompress(HttpContent content) 
         { 
          // Handle compression... 
          throw new NotImplementedException(); 
         } 
        } 
    } 
    
    関連する問題