.NET 8 API部署后仍使用旧SQL连接串问题求助
核心问题:连接串配置冲突
你当前的连接串同时包含user id/password和Trusted_Connection=True,SQL Server的优先级规则是优先使用Windows集成身份验证,所以即使你写了SQL账号密码,系统还是会用应用池的Windows用户去连接数据库,这就是事件日志里显示的现象。
解决与排查步骤
修正连接串
把连接串里的Trusted_Connection=True改为Trusted_Connection=False,或者直接删除这个参数,确保只保留SQL账号密码的配置:"MainConnection": "Server=.;Database=MyDatabase;user id=API_DatabaseUser;password=api_password;encrypt=false;MultipleActiveResultSets=true"检查配置加载优先级
.NET 8的配置加载有固定优先级(从高到低):命令行参数 > 环境变量 > web.config的<connectionStrings>节点 > appsettings.Production.json > appsettings.json。- 检查web.config里的
<connectionStrings>是否存在同名的MainConnection,如果有,确保它的配置和你想要的一致,否则会覆盖appsettings的内容; - 确认发布设置里的连接串替换规则是否正确,有没有把开发环境的配置错误地带到生产环境。
- 检查web.config里的
验证部署后的实际配置文件
登录到服务器,找到API的部署目录,直接打开appsettings.json(以及appsettings.Production.json如果存在),确认里面的连接串确实是修改后的版本——有时候发布过程中配置文件可能没有被正确替换,比如项目里的配置文件设置了“不复制到输出目录”。排查环境变量
检查服务器上是否设置了环境变量ConnectionStrings__MainConnection(注意双下划线是.NET的环境变量命名规则),如果有,这个值会覆盖appsettings里的配置,需要删除或者修改成正确的连接串。核对代码中的配置读取逻辑
再次确认代码中读取连接串的代码是否正确,比如是不是用了Configuration.GetConnectionString("MainConnection"),有没有写错键名,或者有没有硬编码的旧连接串(比如在DbContext的配置里直接写了集成验证的连接串)。
内容的提问来源于stack exchange,提问作者RMaco

