Как вы перебираете пользовательские ключи в web.config? - PullRequest
3 голосов
/ 25 ноября 2008

возможно ли создать мои собственные ключи в файле asp.net web.config и перебирать их с помощью C #? Как вы делаете оба (куда я положу ключ? Какой формат?)? У меня есть приложение для интранета, которое делает определенные вещи на основе IP-адреса клиента. Вместо того, чтобы жестко кодировать их в файле codebehind, я решил поместить их в файл web.config и повторить их. Таким образом, я могу добавить или удалить из своего файла конфигурации, не перекомпилируя все.

Мой ключ будет иметь имя, IP-адрес и, возможно, другую информацию.

Спасибо.

Ответы [ 3 ]

11 голосов
/ 26 марта 2010

Я думаю, что это должно сделать это для вас ...

Это в вашем web.config ...

<configSections>
    <section name="DataBaseKeys" type="System.Configuration.NameValueFileSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</configSections>
<DataBaseKeys>
    <!--Connection Strings for databases (or IP Addresses or whatever)-->
    <add key="dbCon1" value="Data Source=DbServerPath;Integrated Security=True;database=DbName1"/>
    <add key="dbCon2" value="Data Source=DbServerPath;Integrated Security=True;database=DbName1"/>
    <add key="dbCon3" value="Data Source=DbServerPath;Integrated Security=True;database=DbName1"/>
    <add key="dbCon4" value="Data Source=DbServerPath;Integrated Security=True;database=DbName1"/>
    <add key="dbCon5" value="Data Source=DbServerPath;Integrated Security=True;database=DbName1"/>  
</DataBaseKeys>

Это твой код ...

using System.Configuration;

using System.Collections.Specialized;

protected void Page_Load(object sender, EventArgs e)
{
    LoadDdls();
}

private void LoadDdls()
{
    NameValueCollection nvcDbKeys = GetDbKeys();

    //Loop through the collection       
    for (int i = 0; i < nvcDbKeys.Count; i++)
    {
        // "Keys" is the "key" - Get(int) is the "value"
        this.DropDownList1.Items.Add(new ListItem(nvcDbKeys.Keys[i], nvcDbKeys.Get(i)));
    }
}

private NameValueCollection GetDbKeys()
{
    //Declare a name value collection to store Database Key List from web.config
    NameValueCollection nvcDatabaseKeyList;
    nvcDatabaseKeyList = (NameValueCollection) ConfigurationManager.GetSection("DataBaseKeys");

    return nvcDatabaseKeyList;
}
2 голосов
/ 25 ноября 2008

Быстрое и грязное решение : Добавьте ваши ключи в настройки приложения с индексом в виде постфикса, т.е. «key1», «key2» и т. д. и выполняйте цикл, пока не получите ключ, которого не существует Или добавить список с разделителями к одному ключу, т.е. "Значение1; значение2; value3; ..".

Лучшее решение : создайте свой собственный обработчик пользовательских разделов, затем вы можете добавить свои данные по-своему в отдельном разделе web.config. Вам необходимо определить раздел и sectiongroup в верхней части файла web.config со ссылкой на класс обработчика раздела.

<configuration>
   <configSections>
      <sectionGroup name="MySectionGroup">
          <section name="MySection" type="[type and full assembly name]"/>

   ...
   <MySectionGroup>
      <MySection>
         [some xml]

Затем создайте класс обработчика раздела, ему нужно реализовать интерфейс IConfigurationSectionHandler , который определяет Create метод. Create принимает sectionNode в качестве параметра, который является XML-узлом, который вы можете анализировать любым удобным для вас способом. Возвращаемый объект должен содержать данные, которые вы проанализировали. Чтобы загрузить обработчик раздела, напишите:

MySectionDataObject myData = ConfigurationManager.GetSection( "MySectionGroup/Section" ) as MySectionDataObject
2 голосов
/ 25 ноября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...