DelegateHandler的DI无法正常工作

时间:2019-04-18 01:35:36

标签: c# asp.net-core httpclientfactory

刚开始使用HttpFactory,并且非常困惑其DI的工作方式,例如此行的工作方式

services.AddHttpClient<IMyClient, MyClient>()
   .AddHttpMessageHandler(s => new UserAgentDelegatingHandler());

这不是

services.AddHttpClient<IMyClient, MyClient>()
  .AddHttpMessageHandler<UserAgentDelegatingHandler>();

返回

  

“消息:System.InvalidOperationException:没有注册类型'UserAgentDelegatingHandler'的服务。”

在这种情况下,以下代码可以正常工作

services.AddHttpContextAccessor();
services.AddHttpClient<IMyClient, MyClient>()
   .AddHttpMessageHandler(s => new CookieDelegateHandler(s.GetRequiredService<IHttpContextAccessor>()));

但这不是

services.AddHttpContextAccessor();
services.AddHttpClient<IMyClient, MyClient>()
   .AddHttpMessageHandler<CookieDelegateHandler>();

我阅读了许多HttpClientFactory用法示例,这些示例中的DelegateHandlers。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

  

返回“消息:System.InvalidOperationException:无服务   类型'UserAgentDelegatingHandler'已注册。”

此错误表明,使用UserAgentDelegatingHandler时需要注册.AddHttpMessageHandler<UserAgentDelegatingHandler>()

选中AddHttpMessageHandler,您将找到

  

DelegatingHandler的类型。处理程序类型必须注册   作为临时服务。

尝试更改代码,如

services.AddTransient<UserAgentDelegatingHandler>();
services.AddHttpClient<IMyClient, MyClient>()
        .AddHttpMessageHandler<UserAgentDelegatingHandler>();