h0u*_*use 2 c# asp.net-core httpclientfactory
刚开始使用 HttpFactory,并且非常困惑它的 DI 是如何工作的,例如这条线的工作方式
services.AddHttpClient<IMyClient, MyClient>()
.AddHttpMessageHandler(s => new UserAgentDelegatingHandler());
Run Code Online (Sandbox Code Playgroud)
这不
services.AddHttpClient<IMyClient, MyClient>()
.AddHttpMessageHandler<UserAgentDelegatingHandler>();
Run Code Online (Sandbox Code Playgroud)
返回
“消息:System.InvalidOperationException:没有注册‘UserAgentDelegatingHandler’类型的服务。”
这里的情况相同,以下代码工作正常
services.AddHttpContextAccessor();
services.AddHttpClient<IMyClient, MyClient>()
.AddHttpMessageHandler(s => new CookieDelegateHandler(s.GetRequiredService<IHttpContextAccessor>()));
Run Code Online (Sandbox Code Playgroud)
但这并没有
services.AddHttpContextAccessor();
services.AddHttpClient<IMyClient, MyClient>()
.AddHttpMessageHandler<CookieDelegateHandler>();
Run Code Online (Sandbox Code Playgroud)
我从这些示例中阅读了很多 HttpClientFactory 用法示例,以及我的 DelegateHandlers。
我做错了什么?
返回“消息:System.InvalidOperationException:没有注册‘UserAgentDelegatingHandler’类型的服务。”
正如此错误所示,您需要UserAgentDelegatingHandler在使用.AddHttpMessageHandler<UserAgentDelegatingHandler>().
检查AddHttpMessageHandler,你会发现
DelegatingHandler 的类型。处理程序类型必须注册为瞬态服务。
尝试更改您的代码,例如
services.AddTransient<UserAgentDelegatingHandler>();
services.AddHttpClient<IMyClient, MyClient>()
.AddHttpMessageHandler<UserAgentDelegatingHandler>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1018 次 |
| 最近记录: |