.NET 5 Web应用中appsettings.json连接字符串双引号转义后仍触发格式异常的技术咨询
解决.NET 5中含特殊字符的SQL Server连接字符串配置问题
问题原因分析
你已经做了JSON层面的转义(用\"处理密码里的双引号),这能让appsettings.json正确解析字符串,但问题出在SQL Server连接字符串自身的解析规则上:当密码包含双引号、分号这类特殊字符时,Microsoft.Data.SqlClient需要额外的转义处理,而你只完成了JSON的转义,没有适配SqlClient的规则,导致解析连接字符串时把密码里的双引号当成了连接字符串的语法分隔符,从而抛出格式错误。
正确配置方案
下面两种方法都能解决这个问题,你可以任选其一:
方法1:用单引号包裹整个密码
在appsettings.json中,把密码部分用单引号括起来,这样SqlClient会将单引号内部的内容完整识别为密码,内部的双引号不需要额外转义(只需要保持JSON层面的转义即可):
"ConnectionStrings": { "Default": "Server=.; Database=XKCDPublicDb; user id=nitin; password='XKCDDUMMY}Xb\"f~\"'" }
解析后,SqlClient拿到的连接字符串中,密码部分是'XKCDDUMMY}Xb"f~"',单引号作为边界,内部的双引号会被正常识别为密码的一部分。
方法2:按照SqlClient规则转义双引号
SqlClient要求密码中的双引号用两个连续的双引号来转义,结合JSON的转义规则,你需要把密码里的每个"在JSON中写成\"\"(JSON解析后会变成"",符合SqlClient的转义要求):
"ConnectionStrings": { "Default": "Server=.; Database=XKCDPublicDb; user id=nitin; password=\"XKCDDUMMY}Xb\"\"f~\"\"\"" }
解析后传递给SqlClient的密码是XKCDDUMMY}Xb""f~"",SqlClient会自动把连续的双引号解析为单个双引号,作为密码的一部分。
验证建议
你可以在代码中临时添加一行输出,确认解析后的连接字符串是否正确:
// 在Program.cs或Startup.cs中 var connectionString = Configuration.GetConnectionString("Default"); Console.WriteLine(connectionString);
输出的字符串应该符合SqlClient的格式要求,没有语法错误。
内容的提问来源于stack exchange,提问作者Nitin S
相关产品推荐
相关产品推荐

