如何从 ASP.NET Core web api 调用存储在 DigitalOcean 中的 postgresql 数据库?

How can I call a postgresql db stored in DigitalOcean from ASP.NET Core web api?

我想直接在 appsettings.json 文件上使用 DigitalOcean 提供的连接字符串,但显示错误

ArgumentException:不支持关键字:postgresql://XXXXX_user:xxxxxxxxxxxxx@db-trackbus-nyc3-xxxx-do-user-xxxxx-0.b.db.ondigitalocean.com:xxxxx/trackbus?sslmode (参数'keyword') Npgsql.NpgsqlConnectionStringBuilder.GetProperty(字符串关键字)

这是 DigitalOcean 提供的准确连接字符串:

postgresql://xxxx_user:xxxxx@db-trackbus-nyc3-xxxx-do-user-xxxxx-0.b.db.ondigitalocean.com:xxxxx/TrackBus?sslmode=要求

我正在使用 Npgsql nuget 包,当数据库在本地时使用常规连接字符串工作正常

"Server=xxx.0.0.x;Port=xxxx;Database=TrackBus;User Id=postgres;Password=xxxx;"

我也试过这个(私人和public):

"Server=private-db-trackbus-nyc3-xxxxx-do-user-xxxxx-0.b.db.ondigitalocean.com;Port=xxxxx;Database=TrackBus;User Id=xxxxx_user;密码=xxxxxxxxxx;集成安全性=true;"

错误:

处理请求时发生未处理的异常。 PostgresException: 28000: 主机“xxx.xxx.xxx.xxx”、用户“xxxx”、数据库“TrackBus”、SSL 关闭

没有 pg_hba.conf 条目

我搜索了最后一个 28000 异常,但无法应用找到的任何解决方案。

DigitalOcean 提供的连接字符串用于 CLI:

postgresql://xxxx_user:xxxxx@db-trackbus-nyc3-xxxx-do-user-xxxxx-0.b.db.ondigitalocean.com:xxxxx/TrackBus?sslmode=要求

你必须把它转换成appsettings.json使用的格式,它会像这样:

"服务器=db-trackbus-nyc3-xxxx-do-user-xxxxx-0.b.db.ondigitalocean.com;端口=xxxxx;数据库=TrackBus;用户ID=xxxxxxxx;密码=xxxxxxxxx; sslmode=要求;信任服务器证书=true;

sslmode=Require;Trust Server Certificate=true; 非常重要,因为 DigitalOcean 中的托管数据库拥有它。

还要记住,默认情况下所有 postgresql 数据库都阻止远程连接,您必须从 Postgresql 安装文件夹中添加对 pg_hba.conf 文件的权限。