.NET 7如何在appsettings.json中引用环境变量(类Java方式)
.NET 7 中实现类似Java的环境变量引用效果
方法一:利用.NET配置系统的优先级特性(最简便)
.NET的配置系统默认遵循环境变量 > appsettings.json的优先级规则,你完全不需要在appsettings.json中写${DATABASE_URL}这类占位符:
- 直接在代码中通过
Configuration["DatabaseUrl"]读取配置值即可。 - 如果Azure KeyVault同步过来的环境变量里存在
DatabaseUrl(或对应格式转换后的键名,比如环境变量会自动将驼峰转为下划线大写,如DATABASEURL或DATABASE_URL,.NET配置系统会自动映射),系统会直接使用环境变量的值,哪怕appsettings.json里没有这个配置项也能正常读取。
方法二:自定义占位符替换逻辑(若需保留appsettings结构)
如果确实需要在appsettings.json中保留占位符格式,可以在配置加载阶段添加自定义处理逻辑,替换字符串中的${VAR}为对应环境变量的值:
var builder = WebApplication.CreateBuilder(args); // 加载默认配置源 var originalConfig = builder.Configuration; // 处理占位符 var processedConfig = new Dictionary<string, string>(); foreach (var kvp in originalConfig.AsEnumerable()) { if (!string.IsNullOrEmpty(kvp.Value) && kvp.Value.Contains("${")) { var processedValue = Regex.Replace(kvp.Value, @"\${(\w+)}", match => Environment.GetEnvironmentVariable(match.Groups[1].Value) ?? match.Value); processedConfig[kvp.Key] = processedValue; } else { processedConfig[kvp.Key] = kvp.Value; } } // 将处理后的配置加入配置系统 builder.Configuration.AddInMemoryCollection(processedConfig); var app = builder.Build(); // 使用处理后的配置 var dbUrl = app.Configuration["DatabaseUrl"];
方法三:直接集成Azure KeyVault(更贴合你的场景)
无需通过环境变量中转,.NET可以直接将Azure KeyVault作为配置源,优先级高于appsettings:
- 安装NuGet包:
Azure.Extensions.AspNetCore.Configuration.Secrets - 在Program.cs中添加KeyVault配置源:
builder.Configuration.AddAzureKeyVault( new Uri("https://你的密钥保管库名称.vault.azure.net/"), new DefaultAzureCredential() );
之后直接在代码中读取配置键名即可,系统会自动从KeyVault拉取对应值,无需额外处理环境变量。
内容的提问来源于stack exchange,提问作者Jonas Machado
相关产品推荐
相关产品推荐

