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

如何将ASP.NET Core API通过Azure Key Vault连接到Azure托管的数据库

你当前的代码已经拿到了Key Vault中存储的连接字符串,但仅定义了变量接收值,没有将该值注入到应用的配置系统中,同时ConfigureAppConfiguration委托不支持异步写法,异步调用会导致配置加载时序异常。

第一步:修正配置加载代码

修改CreateHostBuilder代码,移除异步委托,将获取到的连接字符串添加到应用配置源:

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((context, builder) =>
        {
            var client = new SecretClient(
              new Uri("https://example.vault.azure.net/"),
              new DefaultAzureCredential());
            // 改用同步方法获取密钥,避免异步时序问题
            KeyVaultSecret secret = client.GetSecret("ConnectionString");
            // 将连接字符串添加到应用配置中,键名可自定义,保持后续读取一致即可
            builder.AddInMemoryCollection(new Dictionary<string, string>
            {
                {"ConnectionStrings:DefaultConnection", secret.Value}
            });
        }
    ).ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.UseStartup<Startup>();
    });

如果不需要单独拉取单个密钥,也可以直接用Azure Key Vault配置扩展批量加载所有密钥,写法更简洁:
首先安装NuGet包Azure.Extensions.AspNetCore.Configuration.Secrets,然后修改代码:

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((context, builder) =>
        {
            builder.AddAzureKeyVault(
                new Uri("https://example.vault.azure.net/"),
                new DefaultAzureCredential());
        }
    ).ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.UseStartup<Startup>();
    });

该写法会自动将Key Vault中所有你有权限访问的密钥同步到应用配置中,密钥名直接作为配置键使用。

第二步:配置数据库上下文

在Startup.cs的ConfigureServices方法中,从配置中读取连接字符串配置你的数据库上下文即可,以SQL Server + EF Core为例:

public void ConfigureServices(IServiceCollection services)
{
    // 其他服务配置...
    services.AddDbContext<你的DbContext类名>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
第三步:验证身份权限
  • 本地开发时,确保你Visual Studio/CLI登录的Azure账号拥有该Key Vault的密钥获取权限,否则本地调试会报错
  • 部署到Azure后,确保你的API服务已经开启系统分配/用户分配托管标识,且你之前在Key Vault访问策略中为该标识授予的权限已经生效

配置完成后,你在控制器、服务中注入数据库上下文即可正常使用,和之前明文写在appsettings.json中的使用逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:51:01