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

如何在通过Azure Key Vault配置.NET时转义点号

Azure Key Vault 覆盖带点号的层级配置问题

问题描述

我需要通过Azure Key Vault覆盖应用的Serilog配置,原配置如下:

{
  "Serilog": {
    "MinimumLevel": {
      "Override": {
        "Microsoft.EntityFrameworkCore.Database.Command": "Warning"
      }
    }
  }
}

配置层级要求用--分隔,但Azure Key Vault不允许密钥名称中使用点号,无法正确识别Microsoft.EntityFrameworkCore.Database.Command这个命名空间。我尝试用问号替代点号(比如Serilog--MinimumLevel--Override--Microsoft?EntityFrameworkCore?Database?Command),但无法生效,请问有什么解决办法?


可行解决方案

方案1:双下划线替代点号+自定义配置映射

Azure Key Vault允许使用下划线,你可以将原配置中的点号替换为双下划线,同时在应用加载配置时添加转换规则:

  1. 在Azure Key Vault中创建秘密,名称设为:
    Serilog--MinimumLevel--Override--Microsoft__EntityFrameworkCore__Database__Command
    
    秘密值设为Warning
  2. 在.NET应用的配置加载代码中,自定义KeyVaultSecretManager来处理层级和点号的转换:
    builder.Configuration.AddAzureKeyVault(
        new Uri("https://your-vault-name.vault.azure.net/"),
        new DefaultAzureCredential(),
        new CustomKeyVaultSecretManager());
    
    public class CustomKeyVaultSecretManager : IKeyVaultSecretManager
    {
        public bool Load(SecretProperties properties) => true;
    
        public string GetKey(KeyVaultSecret secret)
        {
            // 将--替换为配置层级分隔符冒号,将__替换为原配置中的点号
            return secret.Name.Replace("--", ":").Replace("__", ".");
        }
    }
    

方案2:通过Azure App Configuration中转(若使用该服务)

如果你的应用集成了Azure App Configuration,可以直接在App Configuration中创建密钥Serilog:MinimumLevel:Override:Microsoft.EntityFrameworkCore.Database.Command,然后将该密钥关联到Azure Key Vault的对应秘密。App Configuration会自动处理层级映射,无需修改Key Vault的秘密名称。

方案3:直接使用冒号作为层级分隔符

部分框架支持用冒号:作为配置层级分隔符,你可以尝试在Azure Key Vault中创建名称为Serilog:MinimumLevel:Override:Microsoft__EntityFrameworkCore__Database__Command的秘密,然后在配置加载时启用对应解析规则,框架会自动识别层级并替换双下划线为点号。


内容的提问来源于stack exchange,提问作者Uriil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:52:03