Динамически изменить connectionString в web.config - PullRequest
3 голосов
/ 09 августа 2010

В моем web.config есть

<connectionStrings>
   <add name="ActiveDirectoryConnection" connectionString="LDAP://ActiveDirectoryDomain1.com" providerName="System.Web.Security.ActiveDirectoryMembershipProvider"/>
</connectionStrings>

Мне нужно добавить раскрывающийся список на мою страницу входа, который позволяет пользователю изменить строку соединения на другую строку, например, "LDAP: //ActiveDirectoryDomain2.com"

В коде C # как изменить значение connectionString?


Дополнительная информация:

Проблема, с которой я сталкиваюсь, состоит в том, что есть 4 другие настройки web.config, которые вызывают эту строку подключения. Например:

<activeDirectorySecurityContextSettings connectionStringName="ActiveDirectoryConnection" defaultADUserName="ReportUser" defaultADPassword="password"/>  

Спасибо!

Ответы [ 4 ]

7 голосов
/ 09 августа 2010

Если пользователь может изменить значение параметра, то файл web.config является неправильным местом для сохранения параметра.

Вместо этого вы должны проверить значение пользовательской области в файле настроек.

MSDN - Использование настроек в C #

При использовании таких настроек изменение значения во время выполнения очень просто:

Properties.Settings.Default.LdapConnectionString = "New Connection String";
Properties.Settings.Default.Save();
3 голосов
/ 09 августа 2010
  • Плохая идея изменять файл * .config изнутри программы.
  • Плохая идея для веб-страницы изменять любой файл в корневой папке вашего сайта.
  • Плохо иметь набор разрешений, позволяющий веб-странице изменять файлы в корневой папке вашего сайта.

В принципе, вам нужно забыть о файле web.config и его структуре.Ваш код для использования строки подключения существует только в памяти.

2 голосов
/ 09 августа 2010
var settings = ConfigurationManager.ConnectionStrings[ 0 ];

var fi = typeof( ConfigurationElement ).GetField( "_bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic );

fi.SetValue(settings, false);

settings.ConnectionString = "Data Source=Something";
0 голосов
/ 11 июня 2012

Даже если плохая идея изменить файл web.config внутри приложения, вы можете попробовать это:

System.Configuration.ConfigurationManager.AppSettings.Set("keyToBeReplaced", "newKeyValue");
...