如何在Controller中访问Program.cs中声明的环境变量?
实现方案:在Controller中共享环境变量并作为请求头使用
1. 将环境变量注册为全局服务
在Program.cs中,把读取到的key注册为单例服务,让所有Controller都能通过依赖注入获取:
// 读取环境变量 var key = EnvironmentVariableHelper.ReadValue(String.Empty, EnvironmentVariablesKeys.Key); // 注册为单例服务,确保全局可注入 builder.Services.AddSingleton(key);
2. 在Controller中注入并使用
在XController的构造函数中注入这个key,然后在调用外部RestAPI时添加到请求头:
public class XController : ControllerBase { private readonly string _apiKey; private readonly HttpClient _httpClient; // 通过构造函数注入apiKey和HttpClient public XController(string apiKey, HttpClient httpClient) { _apiKey = apiKey; _httpClient = httpClient; } [HttpGet] public async Task<IActionResult> CallExternalApi() { // 根据外部API要求添加请求头,比如Bearer认证或自定义密钥头 _httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {_apiKey}"); // 也可以用自定义头格式:_httpClient.DefaultRequestHeaders.Add("X-API-Key", _apiKey); // 调用外部API var response = await _httpClient.GetAsync("https://your-external-api.com/target-endpoint"); response.EnsureSuccessStatusCode(); var responseContent = await response.Content.ReadAsStringAsync(); return Ok(responseContent); } }
3. 可选:封装为配置类(多变量管理更规范)
如果需要管理多个环境变量,建议创建配置类统一维护:
// 定义配置类 public class ApiSettings { public string ApiKey { get; set; } }
在Program.cs中注册配置类实例:
var apiSettings = new ApiSettings { ApiKey = EnvironmentVariableHelper.ReadValue(String.Empty, EnvironmentVariablesKeys.Key) }; builder.Services.AddSingleton(apiSettings);
在Controller中注入配置类:
public class XController : ControllerBase { private readonly ApiSettings _apiSettings; private readonly HttpClient _httpClient; public XController(ApiSettings apiSettings, HttpClient httpClient) { _apiSettings = apiSettings; _httpClient = httpClient; } [HttpGet] public async Task<IActionResult> CallExternalApi() { _httpClient.DefaultRequestHeaders.Add("X-API-Key", _apiSettings.ApiKey); // 后续API调用逻辑... } }
内容的提问来源于stack exchange,提问作者Jess
相关产品推荐
相关产品推荐

