如何从appsettings.json读取配置完成HttpClient/HttpMessageHandler配置
实现方案
1. 定义配置映射实体类
首先创建和配置节结构对应的实体类,用于配置绑定:
public class TrackAndTraceSettings { public string DebugBaseUrl { get; set; } public string BaseUrl { get; set; } public string Username { get; set; } public string Password { get; set; } public string CompanyCode { get; set; } }
2. 注册配置绑定
在服务注册阶段完成配置节和实体类的绑定,配置只会在此阶段读取一次:
// 若为.NET 6+ Minimal API 写法,将Configuration替换为builder.Configuration services.Configure<TrackAndTraceSettings>(Configuration.GetSection("TrackAndTrace"));
3. 改造HttpClient注册逻辑
使用ConfigurePrimaryHttpMessageHandler带服务提供者参数的重载,从容器中读取已绑定好的配置:
services.AddHttpClient<TestApi>() .ConfigurePrimaryHttpMessageHandler(sp => { // 从容器中获取配置,IOptions<T>为单例,仅初始化读取一次配置 var settings = sp.GetRequiredService<IOptions<TrackAndTraceSettings>>().Value; return new HttpClientHandler() { Credentials = new NetworkCredential(settings.Username, settings.Password), }; });
方案说明
ASP.NET Core 自带的IOptions<T>默认是单例生命周期,配置仅在应用启动时从配置文件绑定一次,后续直接从内存读取,完全满足高效读取的要求,同时符合官方配置规范。
内容的提问来源于stack exchange,提问作者Jonathan Wood
相关产品推荐
相关产品推荐

