2016-08-02 13 views
3

私は、暗号化や圧縮が可能なレスポンスやBase64エンコードされたレスポンスを送信するWeb APIに対してクエリを行う必要があります。のように、HttpMessageHandlerのチェーンとしてこれを実装したいと思います。しかし、Web API。HttpClient用に複数のHTTPメッセージハンドラを使用できますか?

HttpClientのコンストラクタにはHttpMessageHandlerが含まれているため、これが最初です。私は、複数のハンドラーを自分で連鎖させるためのソリューションを考え出す必要がありますか、それとももっと良い選択肢ですか?

答えて

3

HttpMessageHandlerの最も簡単な方法は、そのベースSendAsync実装で呼び出し、そのコンストラクタ、内側HttpMessageHandlerかかりDelegatingHandler、継承することです。

public class MyHandler1 : DelegatingHandler 
{ 
    protected async override Task<HttpResponseMessage> SendAsync(
     HttpRequestMessage request, 
     CancellationToken cancellationToken) 
    { 
     // do something before the inner handler runs (modify the request?) 

     var response = await base.SendAsync(request, cancellationToken); 

     // do something after the inner handler runs (modify the repsonse?) 

     return response; 
    } 
} 

これらの複数を武器に、あなたはHttpClientを構築するときに、好きな順序でそれらを一緒にチェーン:

var client = new HttpClient(
    new MyHandler1(
     new MyHandler2(
      new MyHandler3(...)))); 
関連する問題