2

刚开始使用 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。

我做错了什么?

4

1 回答 1

7

返回“消息:System.InvalidOperationException:没有注册类型‘UserAgentDelegatingHandler’的服务。”

如此错误所示,您需要UserAgentDelegatingHandler在使用.AddHttpMessageHandler<UserAgentDelegatingHandler>().

检查AddHttpMessageHandler,你会发现

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

尝试更改您的代码,例如

services.AddTransient<UserAgentDelegatingHandler>();
services.AddHttpClient<IMyClient, MyClient>()
        .AddHttpMessageHandler<UserAgentDelegatingHandler>();
于 2019-04-18T05:16:38.840 回答