我正在开发一个 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>();
}
锦标赛服务类:
public ToornamentService(HttpClient client)
{
Client = client; // client.BaseAddress here is null
}
删除这一行:services.AddTransient<ToornamentService>();
你打电话时AddHttpClient
,它注册服务for you作为瞬态。
所以你要做的就是注册两次。由于您的临时注册是最后一次注册,因此它优先于AddHttpClient
登记。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)