在VS2022中从.net 7 API连接到运行在Docker中的SQL Server时,证书不受信任错误



我有一个API,我已经从。net Core 3.1升级到。net 7。当试图连接到数据库时,它现在抛出一个错误。

错误是:

与服务器成功建立连接,但在登录过程中发生错误。(提供者:SSL提供者,错误:0 -证书链是由不受信任的机构颁发的。

我使用VS2022, SQL Server (mcr.microsoft.com/mssql/server:2022-latest)在Docker容器中运行。

我正在使用Docker Compose:

version: '3.9'
services:
sql-server-db:
image: "mcr.microsoft.com/mssql/server:2022-latest"
container_name: sql-server-db
environment:
MSSQL_SA_PASSWORD: "P@ssw0rd"
ACCEPT_EULA: "Y"
ports:
- "1433:1433"
volumes: 
- sql1:/var/opt/mssql
volumes:
sql1:
external: false

连接字符串是

server=127.0.0.1,1433;Initial Catalog=xxx;user id=sa;password=P@ssw0rd;Encrypt=False;TrustServerCertificate=True

从我读过的帖子来看,Encrypt=FalseTrustServerCertificate=True应该解决这个问题,但两者都没有帮助。

我已经确认SQL Server实例运行正常,我可以使用SSMS连接,使用连接字符串中的用户名和密码。

此外,我可以确认它可以与。net 6一起工作,所以它肯定是。net 7的问题& &;EntityFrameworkCore 7 .

我只添加了"信任服务器证书= true;在我更新我的应用程序后,我的连接字符串。尝试删除"Encrypt=False"

正如我之前在你的Mastodon帖子中提到的,这是一个针对几个问题的全面错误信息。

我通过使用持久性的标准卷来解决它,另一个人在GitHub问题上提到,我看到他们通过应用密码要求来解决它(我认为他们至少有8个字符,至少有一个小写字母,至少有一个大写字母,至少有一个数字和至少一个符号)。

我已经设法解决了这个问题。

我更改了存储库以注入IDbContextFactory<>并创建一个DbContext,而不是直接注入DbContext对象。

public BookRepository(IDbContextFactory<SampleAPIContext> dbContextFactory, IRestToLinqParser<Book> parser, ILogger<BookRepository> logger) : base(dbContextFactory, parser, logger)
{
}

并更改我的Startup.cs以添加IDbContextFactory而不是DBContext

services.AddDbContextFactory<SampleAPIContext>(
options => SqlServerDbContextOptionsExtensions.UseSqlServer(options, connectionString)
);

我不完全确定为什么这有不同,但确实如此。