You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 06:25:05