0

所以,我正在尝试使用 autorest 创建一个休息客户端。生成的代码在构造函数的参数中有一个 DelegatingHandler 数组params DelegatingHandler[] handlers

我以前从未使用过委托处理程序,也不知道如何注入它们。我该怎么做?

我们正在使用 .net core 1.1 并使用 Startup.cs 中的 ConfigureServices 方法注入依赖项。

4

1 回答 1

1

真的很老的问题,但我碰巧知道答案。

  1. 像这样创建您的 HttpClient:
this.httpHandler = CreatePipeline(handlers);
this.httpClient = new HttpClient(httpHandler);
  1. CreatePipeline 看起来像这样:
private static HttpMessageHandler CreatePipeline(IEnumerable<HttpMessageHandler> handlers)
{
    HttpMessageHandler pipeline = handlers.LastOrDefault() ?? DefaultHandlerFactory();
    if (pipeline is DelegatingHandler dHandler && dHandler.InnerHandler == null)
    {
        dHandler.InnerHandler = DefaultHandlerFactory();
        pipeline = dHandler;
    }

    // Wire handlers up in reverse order
    IEnumerable<HttpMessageHandler> reversedHandlers = handlers.Reverse().Skip(1);
    foreach (HttpMessageHandler handler in reversedHandlers)
    {
        dHandler = handler as DelegatingHandler;
        if (dHandler == null)
        {
            throw new ArgumentException($"bad handler", nameof(handlers));
        }

        dHandler.InnerHandler = pipeline;
        pipeline = dHandler;
    }

    return pipeline;
}

然后,您只需创建一个 HttpClientHandler(由 DefaultHandlerFactory 处理),您可以轻松地对其进行新建。

于 2021-05-25T23:38:39.520 回答