【问题标题】:Can you have more than one HTTP Message Handler for HttpClient?可以为 HttpClient 提供多个 HTTP 消息处理程序吗?
【发布时间】:2016-08-02 10:34:22
【问题描述】:

我需要查询发送可以加密和/或压缩和/或 Base64 编码的响应的 Web API,我想将其实现为HttpMessageHandlers 链,非常类似于@987654321 中所述@,虽然是用于 Web API。

HttpClient 的构造函数采用HttpMessageHandler,所以这是一个开始。我是否必须自己想出一个链接多个处理程序的解决方案,或者是否有更好的选择?

【问题讨论】:

    标签: asp.net asp.net-mvc dotnet-httpclient


    【解决方案1】:

    链接HttpMessageHandlers 的最简单方法是从DelegatingHandler 继承,它在其构造函数中采用内部HttpMessageHandler,并在其基础SendAsync 实现中调用它。

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

    【讨论】:

      猜你喜欢
      • 2011-03-05
      • 1970-01-01
      • 2010-11-03
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 2021-07-03
      • 2012-05-04
      相关资源
      最近更新 更多