编辑 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=&quot;data source=.\SQL2012;initial catalog=tooling_041718;persist security info=True;user id=mm;password=mm;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
如您所见,&
已添加到两个不同位置的连接字符串中。
我尝试在字符串的两个不同位置使用 " + Regex.Escape("&") + "
而不是“&”来转义“&”字符,并且我尝试取出 string.Format()
并且只有一个简单的字符串。
有谁知道在保存到 web.config 时是否有办法避免更改“&”?
您可以在保存前使用System.Web.HttpUtility.HtmlDecode
,因为保存时,它使用HTML编码进行编码。
如果这样做,它会将 "
转换为 "
,并且在保存时,它会将 "
转换回 "
。
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="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();
或者您可以直接在连接字符串中写入 "
(转义:\"
)而不是 "
:
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);
我有一个配置管理器,用于在使用前设置 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=&quot;data source=.\SQL2012;initial catalog=tooling_041718;persist security info=True;user id=mm;password=mm;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />
如您所见,&
已添加到两个不同位置的连接字符串中。
我尝试在字符串的两个不同位置使用 " + Regex.Escape("&") + "
而不是“&”来转义“&”字符,并且我尝试取出 string.Format()
并且只有一个简单的字符串。
有谁知道在保存到 web.config 时是否有办法避免更改“&”?
您可以在保存前使用System.Web.HttpUtility.HtmlDecode
,因为保存时,它使用HTML编码进行编码。
如果这样做,它会将 "
转换为 "
,并且在保存时,它会将 "
转换回 "
。
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="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();
或者您可以直接在连接字符串中写入 "
(转义:\"
)而不是 "
:
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);