Nic*_*mme 2 c# dependency-injection dotnet-httpclient asp.net-core .net-5
我正在开发一个 ASP.NET Core 5.0 项目,该项目具有访问 API 的服务。根据下面的代码,我希望提供给 ToornamentService 的构造函数的 HttpClient 包含声明的 BaseAddress 和 API 密钥标头。
但是,在调试时,我注意到 HttpClient 从来没有这些。BaseAdress 为空,并且缺少标头。我尝试使用 IHttpClientFactory 而不是类型化的客户端,但最终得到相同的结果。
我究竟做错了什么?
配置服务方法:
public void ConfigureServices(IServiceCollection services)
{
//Omitted for brevity
services.AddHttpClient<ToornamentService>(c =>
{
c.BaseAddress = new Uri("https://api.toornament.com/");
c.DefaultRequestHeaders.Add("X-Api-Key", Configuration["Toornament:ApiKey"]);
});
services.AddTransient<ToornamentService>();
}
Run Code Online (Sandbox Code Playgroud)
ToornamentService 类:
public ToornamentService(HttpClient client)
{
Client = client; // client.BaseAddress here is null
}
Run Code Online (Sandbox Code Playgroud)
删除这一行: services.AddTransient<ToornamentService>();
当您调用 时AddHttpClient,它会为您注入临时服务。
所以你正在做的是注射两次。由于您的瞬时注入是最后一次注入,因此它优先于AddHttpClient注入。
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |