.NET 6 Web API如何将appsettings配置读取为环境变量?
解决方法
方法1:手动将appsettings配置同步到环境变量
在Program.cs中,加载完配置后把指定配置项同步到进程环境变量,后续调用Environment.GetEnvironmentVariable就能读到值:
var builder = WebApplication.CreateBuilder(args); // 读取appsettings里的UID并同步到环境变量 var uid = builder.Configuration["UID"]; if (!string.IsNullOrEmpty(uid)) { Environment.SetEnvironmentVariable("UID", uid); } // 后续服务注册、应用构建代码... var app = builder.Build(); // 示例读取 var x = Environment.GetEnvironmentVariable("UID"); // 此时能获取到"myUid"
方法2:直接通过IConfiguration读取(更推荐)
.NET配置系统本身支持直接读取appsettings内容,没必要绕到环境变量。可以在需要的地方注入IConfiguration直接读取:
控制器中使用:
[ApiController] [Route("[controller]")] public class TestController : ControllerBase { private readonly IConfiguration _configuration; public TestController(IConfiguration configuration) { _configuration = configuration; } [HttpGet] public string Get() { var x = _configuration["UID"]; // 直接获取appsettings里的"myUid" return x; } }
Program.cs中直接读取:
var builder = WebApplication.CreateBuilder(args); var x = builder.Configuration["UID"]; // 这里就能读到配置值
为什么原方式返回null?
Environment.GetEnvironmentVariable只能读取系统/用户环境变量,或者launchsettings.json中environmentVariables节点下的配置项(启动时会被设为进程环境变量)。而appsettings.json的配置属于.NET专属配置系统,默认不会自动同步到进程环境变量,所以直接调用该方法会返回null。
内容的提问来源于stack exchange,提问作者user584018
相关产品推荐
相关产品推荐

