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

如何在ASP.NET Core Web API中连接DigitalOcean托管的PostgreSQL数据库

问题原因与解决方案

错误1:ArgumentException: Keyword not supported: postgresql://xxx

原因

Npgsql 默认仅支持键=值;格式的连接字符串,无法直接解析DigitalOcean给出的postgresql://开头的URI格式连接串。

解决方案

二选一即可:

  • 方案1:代码层转换URI格式
    读取配置后手动解析URI生成标准连接串:
var pgConnUri = new Uri(Configuration.GetConnectionString("DefaultConnection"));
var pgConnBuilder = new NpgsqlConnectionStringBuilder
{
    Host = pgConnUri.Host,
    Port = pgConnUri.Port,
    Username = pgConnUri.UserInfo.Split(':')[0],
    Password = pgConnUri.UserInfo.Split(':')[1],
    Database = pgConnUri.AbsolutePath.TrimStart('/'),
    SslMode = SslMode.Require
};
string finalConnString = pgConnBuilder.ToString();
  • 方案2:手动转为标准键值对格式写入appsettings.json
    必须添加SslMode=Require参数,必须删除错误的Integrated Security=true配置(该参数仅适用于本地Windows集成认证,DigitalOcean托管PostgreSQL不支持):
{
  "ConnectionStrings": {
    "DefaultConnection": "Server=db-trackbus-nyc3-xxxx-do-user-xxxxx-0.b.db.ondigitalocean.com;Port=xxxxx;Database=TrackBus;User Id=xxxxx_user;Password=xxxxxxxxxx;SslMode=Require;"
  }
}

如果使用私网连接,只需要把Server字段替换为私网地址即可,其余参数不变。

错误2:PostgresException: 28000: no pg_hba.conf entry for host ... SSL off

原因

触发该错误有两个核心原因:

  1. 连接串未加SslMode=Require参数,DigitalOcean托管PostgreSQL默认强制要求SSL连接,非SSL请求会被直接拦截
  2. 数据库访问权限未放开:如果使用公网连接,需要先在DigitalOcean数据库控制台的可信来源配置中添加你当前服务的公网出口IP;如果使用私网连接,需要保证你的服务和数据库在同一个VPC内。

验证步骤

  • 测试阶段可以临时将数据库可信来源设置为0.0.0.0/0确认连接是否正常,验证通过后务必改回仅限你的服务IP访问
  • 再次确认连接串中已删除Integrated Security=true配置,且正确添加SslMode=Require

内容的提问来源于stack exchange,提问作者Techy Hernández

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 01:27:03