ASP.NET web.config中含左尖括号的密码导致连接字符串异常问题
web.config连接字符串含左尖括号无法连接问题解决方案
我在MVC项目的web.config文件中构建连接字符串时遇到问题:其余配置均正常,但我需要使用自动生成的密码,最新生成的密码包含左尖括号,使用该密码后连接字符串无法正确构建,最终出现连接失败问题。我使用的连接字符串如下:
Data Source=JungJu.database.windows.net;Initial Catalog=MainDb;User ID=FuntoGo;Password=OV_Xu2v8j2K$@~/<bI,A]d;Authentication=Active Directory Password
问题根因
web.config 是标准XML格式文件,< 属于XML预留的语法字符,直接写在配置属性里会被XML解析器识别为标签的起始标记,导致配置解析错误,最终读取到的连接字符串不完整,触发连接失败。
解决方法
- 方法1:对XML特殊字符做转义替换
你密码里的<直接替换为XML转义字符<即可,修改后的完整连接字符串如下:Data Source=JungJu.database.windows.net;Initial Catalog=MainDb;User ID=FuntoGo;Password=OV_Xu2v8j2K$@~/<bI,A]d;Authentication=Active Directory Password
补充:如果后续密码里出现其他XML特殊字符,对应转义规则为&替换为&、>替换为>、单引号替换为'、双引号替换为"。 - 方法2:用CDATA段包裹连接字符串
如果密码里特殊字符较多,不想逐个转义,可以修改connectionStrings节点的写法,用CDATA标记包裹完整连接字符串,XML解析器会直接读取CDATA内的原始内容,不会解析里面的特殊字符,写法示例:<connectionStrings> <add name="MainDbConnection"> <value><![CDATA[Data Source=JungJu.database.windows.net;Initial Catalog=MainDb;User ID=FuntoGo;Password=OV_Xu2v8j2K$@~/<bI,A]d;Authentication=Active Directory Password]]></value> </add> </connectionStrings> - 方法3:代码动态配置连接字符串
也可以在MVC项目的Global.asax文件的Application_Start方法中,动态赋值连接字符串,代码字符串中的<不需要转义,示例如下:protected void Application_Start() { // 原有全局配置代码保留 var connectionString = @"Data Source=JungJu.database.windows.net;Initial Catalog=MainDb;User ID=FuntoGo;Password=OV_Xu2v8j2K$@~/<bI,A]d;Authentication=Active Directory Password"; ConfigurationManager.ConnectionStrings["MainDbConnection"].ConnectionString = connectionString; }
验证方式
修改完成后可在调试阶段读取 ConfigurationManager.ConnectionStrings["你的连接字符串配置名"].ConnectionString,确认输出内容和预期的原始连接字符串完全一致后,再测试数据库连接即可。
内容的提问来源于stack exchange,提问作者Jashvita
相关产品推荐
相关产品推荐

