编辑 ASP web.config 中的连接字符串包括使用 & 符号

Editing Connection String in ASP web.config include using ampersand

我有一个配置管理器,用于在使用前设置 Web 应用程序。此配置管理器中包括数据库连接字符串的设置。我有可以修改连接字符串并保存的工作代码,但我有 运行 遇到一个我似乎无法纠正的问题。

连接字符串包含“&”字符,因此当将字符串保存到 web.config 文件时,字符串从“&”变为“&”。我尝试了几种不同的代码变体来解决这个问题,但没有任何效果。

这里是保存连接字符串的代码:

System.Configuration.Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/");
ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection;

section.ConnectionStrings["DALEntities"].ConnectionString = string.Format("metadata=res://*/DALModel.csdl|res://*/DALModel.ssdl|res://*/DALModel.msl;provider=System.Data.SqlClient;provider connection string="data source={0};initial catalog={3};persist security info=True;user id={1};password={2};multipleactiveresultsets=True;application name=EntityFramework"", settings.SQLserverName, settings.SQLuserName, settings.SQLpassword, settings.SQLdatabaseName);

config.Save();

这可以保存连接字符串,但这是保存到 web.config 文件的内容:

<add name="DALEntities" connectionString="metadata=res://*/DALModel.csdl|res://*/DALModel.ssdl|res://*/DALModel.msl;provider=System.Data.SqlClient;provider connection string=&amp;quot;data source=.\SQL2012;initial catalog=tooling_041718;persist security info=True;user id=mm;password=mm;multipleactiveresultsets=True;application name=EntityFramework&amp;quot;" providerName="System.Data.EntityClient" />

如您所见,&amp; 已添加到两个不同位置的连接字符串中。

我尝试在字符串的两个不同位置使用 " + Regex.Escape("&") + " 而不是“&”来转义“&”字符,并且我尝试取出 string.Format() 并且只有一个简单的字符串。

有谁知道在保存到 web.config 时是否有办法避免更改“&”?

您可以在保存前使用System.Web.HttpUtility.HtmlDecode,因为保存时,它使用HTML编码进行编码。

如果这样做,它会将 &quot; 转换为 ",并且在保存时,它会将 " 转换回 &quot;

System.Configuration.Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~/");
ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection;

section.ConnectionStrings["DALEntities"].ConnectionString = System.Web.HttpUtility.HtmlDecode(string.Format("metadata=res://*/DALModel.csdl|res://*/DALModel.ssdl|res://*/DALModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source={0};initial catalog={3};persist security info=True;user id={1};password={2};multipleactiveresultsets=True;application name=EntityFramework&quot;", settings.SQLserverName, settings.SQLuserName, settings.SQLpassword, settings.SQLdatabaseName));

config.Save();

或者您可以直接在连接字符串中写入 "(转义:\")而不是 &quot;

section.ConnectionStrings["DALEntities"].ConnectionString = string.Format("metadata=res://*/DALModel.csdl|res://*/DALModel.ssdl|res://*/DALModel.msl;provider=System.Data.SqlClient;provider connection string=\"data source={0};initial catalog={3};persist security info=True;user id={1};password={2};multipleactiveresultsets=True;application name=EntityFramework\"", settings.SQLserverName, settings.SQLuserName, settings.SQLpassword, settings.SQLdatabaseName);