对于指定的客户,Brad 的回答可能是唯一的解决方案。但是对于键入的客户端,您可以按照 mjwills 的建议注入密钥。
在启动时:
services.AddSingleton<IApiKeyProvider, ApiKeyProvider>();
ApiKeyProvider 在哪里:
public class ApiKeyProvider: IApiKeyProvider
{
public string ApiKey { get; set; }
}
并注入类型化的客户端:
public class MyHttpClient
{
public HttpClient Client { get; }
public MyHttpClient(HttpClient client, IApiKeyProvider apiKeyProvider)
{
var key = apiKeyProvider.ApiKey;
}
}
或者当密钥存储在配置中时,您可以使用 IOptions。
在启动时:
services.Configure<ApiSettings>(options => configuration.GetSection("ApiSettings").Bind(options));
ApiSettings 在哪里:
public class ApiSettings
{
public string ApiKey { get; set; }
}
并注入类型化的客户端:
public class MyHttpClient
{
public HttpClient Client { get; }
public MyHttpClient(HttpClient client, IOptions<ApiSettings> apiSettings)
{
var key = apiSettings.Value.ApiKey;
}
}
以同样的方式,您可以访问请求上下文,例如当您想读取当前的 access_token 时,如我在此处的回答中所述。