刚开始使用 HttpFactory,并且非常困惑它的 DI 是如何工作的,例如这一行工作
services.AddHttpClient<IMyClient, MyClient>()
.AddHttpMessageHandler(s => new UserAgentDelegatingHandler());
这不是
services.AddHttpClient<IMyClient, MyClient>()
.AddHttpMessageHandler<UserAgentDelegatingHandler>();
返回
"Message: System.InvalidOperationException : No service for type 'UserAgentDelegatingHandler' has been registered."
同样的情况,下面的代码工作正常
services.AddHttpContextAccessor();
services.AddHttpClient<IMyClient, MyClient>()
.AddHttpMessageHandler(s => new CookieDelegateHandler(s.GetRequiredService<IHttpContextAccessor>()));
但这不是
services.AddHttpContextAccessor();
services.AddHttpClient<IMyClient, MyClient>()
.AddHttpMessageHandler<CookieDelegateHandler>();
我阅读了很多 HttpClientFactory 用法示例,我的 DelegateHandlers 来自这些示例。
我做错了什么?
最佳答案
return "Message: System.InvalidOperationException : No service for type 'UserAgentDelegatingHandler' has been registered."
如该错误所示,您需要注册 UserAgentDelegatingHandler
当你使用 .AddHttpMessageHandler<UserAgentDelegatingHandler>()
.
检查 AddHttpMessageHandler ,你会发现
The type of the DelegatingHandler. The handler type must be registered as a transient service.
试着改变你的代码
services.AddTransient<UserAgentDelegatingHandler>();
services.AddHttpClient<IMyClient, MyClient>()
.AddHttpMessageHandler<UserAgentDelegatingHandler>();
关于c# - DelegateHandler 的 DI 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55738010/