如何在Blazor Server的HttpClient辅助类中读取配置数据
解决Blazor Server中辅助类读取appsettings.json配置的问题
方法一:直接注入IConfiguration读取配置
适合简单场景,直接在MyHelper构造函数中注入IConfiguration即可读取配置项:
修改MyHelper类
using Microsoft.Extensions.Configuration; using System.Net.Http.Headers; public class MyHelper { private readonly HttpClient _httpClient; private readonly IConfiguration _configuration; public MyHelper(HttpClient httpClient, IConfiguration configuration) { _httpClient = httpClient; _configuration = configuration; _httpClient.DefaultRequestHeaders.Add( HeaderNames.ContentType, "application/json"); // 读取appsettings.json中的配置 var apiBaseUrl = _configuration["ApiSettings:BaseUrl"]; var apiKey = _configuration["ApiSettings:ApiKey"]; // 将配置应用到HttpClient if (!string.IsNullOrEmpty(apiBaseUrl)) { _httpClient.BaseAddress = new Uri(apiBaseUrl); } if (!string.IsNullOrEmpty(apiKey)) { _httpClient.DefaultRequestHeaders.Add("Api-Key", apiKey); } } }
无需修改Program.cs
Blazor Server默认已将IConfiguration注册到服务容器,AddHttpClient<MyHelper>()会自动解析构造函数中的依赖。
方法二:使用强类型配置(推荐)
符合.NET最佳实践,具备类型安全、编译时检查的优势,更易维护:
1. 创建强类型配置类
public class ApiSettings { public string BaseUrl { get; set; } public string ApiKey { get; set; } }
2. 在appsettings.json中添加配置节点
{ "ApiSettings": { "BaseUrl": "https://your-target-api.com/", "ApiKey": "your-api-authentication-key" } }
3. 在Program.cs中绑定并注册配置服务
// 将配置节点绑定到ApiSettings类 builder.Services.Configure<ApiSettings>(builder.Configuration.GetSection("ApiSettings")); // 注册HttpClient辅助类 builder.Services.AddHttpClient<MyHelper>();
4. 修改MyHelper注入强类型配置
using Microsoft.Extensions.Options; using System.Net.Http.Headers; public class MyHelper { private readonly HttpClient _httpClient; private readonly ApiSettings _apiSettings; public MyHelper(HttpClient httpClient, IOptions<ApiSettings> apiSettings) { _httpClient = httpClient; _apiSettings = apiSettings.Value; _httpClient.DefaultRequestHeaders.Add( HeaderNames.ContentType, "application/json"); // 应用强类型配置到HttpClient if (!string.IsNullOrEmpty(_apiSettings.BaseUrl)) { _httpClient.BaseAddress = new Uri(_apiSettings.BaseUrl); } if (!string.IsNullOrEmpty(_apiSettings.ApiKey)) { _httpClient.DefaultRequestHeaders.Add("Api-Key", _apiSettings.ApiKey); } } }
内容的提问来源于stack exchange,提问作者Curious
相关产品推荐
相关产品推荐

