注入预配置BaseAddress的HttpClient时BaseAddress为null问题求解
问题原因
你预先手动注册了IAuthenticationExchangeClient到AuthenticationExchangeClient的瞬态服务,该注册并未关联你后续通过AddHttpClient配置的HttpClient实例。当你注入IAuthenticationExchangeClient接口时,依赖注入容器会优先使用你最早声明的瞬态服务构造实例,此时注入的是无配置的默认HttpClient,因此BaseAddress为null。
解决方案
删除你手动添加的services.AddTransient<IAuthenticationExchangeClient, AuthenticationExchangeClient>();这行代码,改用AddHttpClient的接口绑定重载完成注册,修改后代码如下:
private static void ConfigureServices(HostBuilderContext hbc, IServiceCollection services) { services.AddHttpClient<IAuthenticationExchangeClient, AuthenticationExchangeClient>(c => c.BaseAddress = new Uri("http://api.mendeley.com")); }
AddHttpClient的该重载会自动完成接口到实现类的服务注册,同时将配置好BaseAddress的HttpClient注入到实现类的构造函数中,后续直接注入IAuthenticationExchangeClient即可正常使用。
内容的提问来源于stack exchange,提问作者ScottishTapWater
相关产品推荐
相关产品推荐

