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

Azure连接字符串功能在ASP.NET Core应用中无法正常使用

解决Azure Linux App Service无法加载Postgres连接字符串的问题

先排查核心问题:连接字符串是否真的注入到环境变量

Azure Linux App Service会将「配置>连接字符串」中的项转换为大写+下划线格式的环境变量,比如你命名的DefaultConnection会变成CONNECTIONSTRINGS_DEFAULTCONNECTION。先确认这个变量是否存在且值正确:

  1. 进入App Service的「开发工具>高级工具>Go」打开Kudu界面
  2. 切换到「Bash」终端,执行命令:
    printenv | grep CONNECTIONSTRINGS
    
  3. 如果看不到CONNECTIONSTRINGS_DEFAULTCONNECTION,说明Azure配置未生效:
    • 回到「配置>连接字符串」,确认名称是DefaultConnection,类型选「Custom」或「PostgreSQL」,值正确后点击「保存」(保存会触发App Service重启)
    • 检查是否有其他部署脚本(比如GitHub Action)覆盖了配置

调整连接字符串读取逻辑

如果环境变量存在但GetConnectionString读不到,直接兜底读取环境变量:

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") 
                       ?? Environment.GetEnvironmentVariable("CONNECTIONSTRINGS_DEFAULTCONNECTION");

builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseNpgsql(connectionString));

排查其他干扰因素

  • GitHub Action部署冲突:如果用azure/webapps-deploy动作,检查是否在部署时通过app-settings-json或--settings参数重置了连接字符串,确保部署脚本不覆盖Azure门户的配置
  • Postgres防火墙限制:在Postgres灵活服务器的「网络>防火墙规则」中,添加App Service的出站IP(可在App Service「属性」中找到),或临时允许所有Azure服务访问(仅测试用)
  • 配置加载顺序验证:在Program.cs中添加日志输出,确认读取的连接字符串内容:
    var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
    Console.WriteLine($"Loaded Connection String: {connectionString}");
    
    然后在App Service的「日志流」中查看输出,判断是读取为空还是值错误

关于Azure密钥库的补充

如果想使用密钥库存储连接字符串,需完成两步:

  1. 给App Service的系统分配身份添加密钥库的「密钥库机密用户」角色
  2. 在Program.cs中添加密钥库配置:
    builder.Configuration.AddAzureKeyVault(
        new Uri($"https://{builder.Configuration["KeyVaultName"]}.vault.azure.net/"),
        new DefaultAzureCredential());
    
    确保密钥库中存储的机密名称与GetConnectionString调用的名称一致(比如ConnectionStrings--DefaultConnection)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:23:16