ASP.NET 6 MVC API无法从appsettings.json读取Azure Key Vault密钥值
问题分析与解决
核心原因
你存在一个关键误解:Azure Key Vault的密钥不会自动写入appsettings.json文件。Program中能获取到kv-secret,是因为你通过builder.Configuration.AddAzureKeyVault()把Azure Key Vault添加成了配置源,此时程序的配置是多个源(appsettings.json、Key Vault等)的组合。而仓储类里的代码重新创建了ConfigurationBuilder,仅加载了appsettings.json,未包含Key Vault配置源,所以无法拿到该密钥值。
正确解决方案:依赖注入IConfiguration
ASP.NET Core推荐通过依赖注入获取配置,而非手动构建ConfigurationBuilder。修改仓储类代码如下:
public class YourRepository { private readonly IConfiguration _configuration; // 构造函数注入IConfiguration public YourRepository(IConfiguration configuration) { _configuration = configuration; } public List<string> GetValueFromAppSettingJsonFile() { // 直接使用注入的配置,已包含Key Vault配置源 var check4 = _configuration["kv-secret"]; // 后续业务逻辑... return new List<string> { check4 }; } }
可选方案:手动添加Key Vault配置源(不推荐)
如果一定要手动构建配置,需在仓储类的ConfigurationBuilder中同步添加Azure Key Vault配置源,与Program中的逻辑保持一致:
public List<string> GetValueFromAppSettingJsonFile() { var configuration = new ConfigurationBuilder() .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) // 添加Key Vault配置源 .AddAzureKeyVault(new Uri("https://kv-vault.azure.net/"), new DefaultAzureCredential()) .Build(); var check4 = configuration["kv-secret"]; // 后续业务逻辑... return new List<string> { check4 }; }
注意:这种方式会重复初始化配置源,增加系统开销,不符合ASP.NET Core的设计理念,优先推荐依赖注入的实现方式。
内容的提问来源于stack exchange,提问作者Jashvita
相关产品推荐
相关产品推荐

