刚开始使用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。
我做错了什么?
答案 0 :(得分:2)
返回“消息:System.InvalidOperationException:无服务 类型'UserAgentDelegatingHandler'已注册。”
此错误表明,使用UserAgentDelegatingHandler
时需要注册.AddHttpMessageHandler<UserAgentDelegatingHandler>()
。
选中AddHttpMessageHandler,您将找到
DelegatingHandler的类型。处理程序类型必须注册 作为临时服务。
尝试更改代码,如
services.AddTransient<UserAgentDelegatingHandler>();
services.AddHttpClient<IMyClient, MyClient>()
.AddHttpMessageHandler<UserAgentDelegatingHandler>();