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

如何在ASP.NET Core Web API中用EF无账号密码连接Azure PostgreSQL弹性服务器

配置Azure PostgreSQL弹性服务器无密码访问(适配EF Core)

前置依赖

先确保安装以下NuGet包:

  • Npgsql.EntityFrameworkCore.PostgreSQL:EF Core的PostgreSQL驱动
  • Azure.Identity:用于获取Azure AD身份令牌

方式1:在DbContext的OnConfiguring中配置

对应你提供的SqlServer版本,修改后的PostgreSQL适配代码如下:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    var connectionString = "你的PostgreSQL基础连接字符串(不含用户名、密码)";
    var npgsqlConnection = new NpgsqlConnection(connectionString);
    
    // 用DefaultCredential自动适配本地/云端身份环境
    var credential = new DefaultCredential();
    // PostgreSQL的Azure AD令牌请求固定scope
    var token = credential.GetToken(
        new Azure.Core.TokenRequestContext(new[] { "https://ossrdbms-aad.database.windows.net/.default" }));
    
    // 给PostgreSQL连接设置访问令牌
    npgsqlConnection.AccessToken = token.Token;
    
    optionsBuilder.UseNpgsql(npgsqlConnection);
}

方式2:在服务注册时配置(适配你当前的代码)

如果想保留现有services.AddDbContext的配置方式,无需修改DbContext,可以这样写:

services.AddDbContext<MediaContext>((serviceProvider, opt) =>
{
    var configuration = serviceProvider.GetRequiredService<IConfiguration>();
    var connectionString = configuration.GetConnectionString(MediaContext.DbConnectionName);
    var npgsqlConnection = new NpgsqlConnection(connectionString);
    
    var credential = new DefaultCredential();
    var token = credential.GetToken(
        new Azure.Core.TokenRequestContext(new[] { "https://ossrdbms-aad.database.windows.net/.default" }));
    
    npgsqlConnection.AccessToken = token.Token;
    opt.UseNpgsql(npgsqlConnection);
});

关键注意事项

  • 连接字符串要求:基础连接字符串只需包含Host、Database、Port、Ssl Mode=Require,不需要Username和Password参数,示例:Host=xxx.postgres.database.azure.com;Database=your-db;Port=5432;Ssl Mode=Require
  • Azure权限配置:确保你使用的身份(本地开发账号、Azure服务托管身份等)已被授予目标PostgreSQL服务器的AAD管理员权限,或对应数据库的角色权限
  • DefaultCredential适配逻辑:该类会自动识别运行环境:本地开发时用你Azure CLI/Visual Studio的登录账号;Azure托管服务(如App Service、VM)时用系统/用户托管身份;容器环境则读取环境变量配置的身份信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:47:37