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

在DigitalOcean应用平台配置.NET Web API生产连接字符串及空值异常解决

解决DigitalOcean App Platform上.NET API连接PostgreSQL集群的连接字符串问题

核心问题原因

你的代码中builder.Configuration.GetConnectionString("DefaultConnection")返回null,说明.NET配置系统未正确读取到设置的环境变量。问题出在环境变量命名规则不符合.NET的配置逻辑,同时连接字符串本身存在不兼容参数。

具体解决步骤

1. 修正环境变量命名格式

.NET的GetConnectionString("DefaultConnection")方法会从配置的ConnectionStrings节点下取值,对应的环境变量名必须是**ConnectionStrings__DefaultConnection**(用双下划线__替代配置层级的冒号:)。

  • 你之前设置的DefaultConnection未归属到ConnectionStrings节点下,因此无法被读取。
  • 在DigitalOcean App Platform的环境变量设置中,将键改为ConnectionStrings__DefaultConnection,值填入修正后的连接字符串(不要加引号)。

2. 修复PostgreSQL连接字符串参数

你当前的连接字符串包含Integrated Security=true,但DigitalOcean托管PostgreSQL不支持Windows集成认证,且集群默认要求SSL连接:

  • 删除Integrated Security=true参数
  • 添加Ssl Mode=Require参数
    修正后的连接字符串示例:
User ID=XXXXXXXX;Password=XXXXXXXXX;Server=XXXXX;Port=XXXX;Database=XXXXXXXXX;Pooling=true;Ssl Mode=Require;

3. 确认环境变量已生效

修改环境变量后必须重新部署应用,否则新配置不会加载:

  • 进入App Platform应用控制台,点击「Deploy」按钮触发重新部署。

4. 调试验证(可选)

若问题仍存在,可在Program.cs中添加临时代码排查配置读取情况:

// 在AddDbContext代码前添加
var connString = builder.Configuration.GetConnectionString("DefaultConnection");
Console.WriteLine($"Loaded DefaultConnection: {connString ?? "NULL"}");
Console.WriteLine($"Existing env vars: {string.Join(", ", Environment.GetEnvironmentVariables().Keys.Cast<string>())}");

查看应用日志,确认是否读取到正确的连接字符串,或环境变量是否已存在。

5. 检查Docker配置(自定义镜像时)

如果使用自定义Dockerfile,需确保没有硬编码连接字符串或覆盖环境变量:

  • 避免在Dockerfile中设置ENV DefaultConnection=xxx这类语句
  • 确保.NET官方镜像默认读取环境变量(.NET 6+官方镜像无需额外配置)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:01:17