Редактирование строки подключения в ASP web.config включает использование амперсанда - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть менеджер конфигурации для настройки веб-приложения перед использованием. В этот диспетчер конфигурации включена настройка строки подключения к базе данных. У меня есть рабочий код, который изменит строку подключения и сохранит, но я столкнулся с проблемой, которую я не могу исправить.

Строка подключения содержит символ «&», поэтому при сохранении строки в файле 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?

1 Ответ

0 голосов
/ 16 ноября 2018

Вы можете использовать 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();

Или вы можете написать " (с escape-кодом: \") вместо &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);
...