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

如何在ASP.NET Core Web API中访问Azure Key Vault密钥并供DbContext使用?

在Azure Web API中将Key Vault密钥传递给DbContext(内存缓存,无需重复调用Key Vault)

核心原理

你已经通过AddAzureKeyVault将Key Vault中的密钥加载到builder.Configuration中,默认情况下这些密钥会被内存缓存,后续读取无需再次调用Key Vault API。接下来只需要把配置中的连接字符串传递给你的DbContext即可。

方法1:注册DbContext时直接读取配置(最简单)

步骤1:在Program.cs中注册DbContext

在配置完Key Vault之后,注册你的DbContext时直接从builder.Configuration读取连接字符串:

var builder = WebApplication.CreateBuilder(args);

// 已有的Key Vault配置
var keyVaultEndpoint = new Uri(Environment.GetEnvironmentVariable("VaultUri"));
builder.Configuration.AddAzureKeyVault(keyVaultEndpoint, new DefaultAzureCredential());

// 注册DbContext并传入连接字符串
builder.Services.AddDbContext<YourDbContext>(options =>
{
    // 替换成你在Key Vault中存储的连接字符串密钥名称
    var connectionString = builder.Configuration["YourDbConnectionString"];
    // 这里以SQL Server为例,根据你的数据库类型替换对应的UseXXX方法
    options.UseSqlServer(connectionString);
});

var app = builder.Build();
// 其他中间件配置...
app.Run();

步骤2:实现你的DbContext类

DbContext只需接收DbContextOptions<T>参数,无需额外处理:

public class YourDbContext : DbContext
{
    public YourDbContext(DbContextOptions<YourDbContext> options) : base(options)
    {
    }

    // 定义你的DbSet,例如:
    public DbSet<YourEntity> YourEntities { get; set; }
}

方法2:使用Options模式(适合多配置项场景)

如果需要管理多个数据库相关配置,可以用Options模式封装:

步骤1:定义配置类

public class DatabaseSettings
{
    public string ConnectionString { get; set; }
}

步骤2:在Program.cs中绑定配置并注册DbContext

var builder = WebApplication.CreateBuilder(args);

// 已有的Key Vault配置
var keyVaultEndpoint = new Uri(Environment.GetEnvironmentVariable("VaultUri"));
builder.Configuration.AddAzureKeyVault(keyVaultEndpoint, new DefaultAzureCredential());

// 绑定Key Vault中的密钥到配置类
builder.Services.Configure<DatabaseSettings>(settings =>
{
    settings.ConnectionString = builder.Configuration["YourDbConnectionString"];
});

// 注册DbContext
builder.Services.AddDbContext<YourDbContext>();

var app = builder.Build();
// 其他中间件配置...
app.Run();

步骤3:在DbContext中注入配置

public class YourDbContext : DbContext
{
    private readonly DatabaseSettings _dbSettings;

    public YourDbContext(IOptions<DatabaseSettings> dbSettings)
    {
        _dbSettings = dbSettings.Value;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(_dbSettings.ConnectionString);
    }

    // 定义DbSet...
}

关键说明

  • 内存缓存验证:AddAzureKeyVault默认使用MemoryCache缓存密钥,启动时仅调用一次Key Vault API,后续读取均从内存获取,无需重复请求。
  • 无需本地存储:整个流程中连接字符串仅存在于内存中,不会写入任何本地文件,符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 11:27:29