2008-11-25 2 views
3

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

У меня будет имя, IP-адрес и, возможно, другая информация.

спасибо.

ответ

10

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

Это находится в вашем 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

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

2

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

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

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

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

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

MySectionDataObject myData = ConfigurationManager.GetSection("MySectionGroup/Section") as MySectionDataObject