2016-08-02 3 views
3

Мне нужно запросить веб-API, который отправляет ответы, которые могут быть зашифрованы и/или сжаты и/или закодированы Base64, и я хотел бы реализовать это как цепочку из HttpMessageHandler, очень похожую на то, что указано в this post, что для Web API.У вас есть более одного обработчика сообщений HTTP для HttpClient?

Существует конструктор для HttpClient, принимающий HttpMessageHandler, так что это начало. Должен ли я придумать решение для цепочки нескольких обработчиков или, может быть, лучший вариант?

ответ

3

Самый простой способ цепи HttpMessageHandler в том, чтобы наследовать от DelegatingHandler, который принимает в своем конструкторе, который он называет в своей базовой реализации SendAsync внутренний HttpMessageHandler.

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(...))));