使用ConfigurationBuilder,如何读取配置中Key Vault名称调用AddAzureKeyVault?是否需两次构建?
问题解答
不需要纠结“一次性完成”,实际开发里通常用两次构建ConfigurationBuilder的方式来解决这个问题,步骤清晰直接:
- 第一次构建:只加载本地配置文件(比如
appsettings.json),目的是读取其中存储的Key Vault名称。 - 第二次构建:在本地配置的基础上,加入Azure Key Vault作为配置源,完成完整的配置构建。
修改后的代码示例:
private static IConfigurationRoot GetIConfigurationRoot() { // 第一次构建:读取本地配置,获取Key Vault名称 var tempConfig = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false) .AddEnvironmentVariables() .Build(); // 从临时配置中取出Key Vault名称(需确保appsettings里有对应配置项) var keyVaultName = tempConfig["KeyVaultName"]; if (string.IsNullOrEmpty(keyVaultName)) { throw new InvalidOperationException("配置文件中未设置Key Vault名称"); } // 第二次构建:整合本地配置与Azure Key Vault var root = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false) .AddAzureKeyVault($"https://{keyVaultName}.vault.azure.net") .AddEnvironmentVariables() .Build(); return root; }
额外注意事项:
- 确保
appsettings.json中配置了对应项,示例格式如下:{ "KeyVaultName": "你的密钥保管库名称" } - 本地开发时,需通过Azure CLI或环境变量完成身份认证;如果应用部署在Azure环境(如App Service),可通过系统分配托管身份授予访问Key Vault的权限,无需额外凭据。
内容的提问来源于stack exchange,提问作者Dr Schizo
相关产品推荐
相关产品推荐

