3

是否可以在 asp.net web.config 文件中创建我自己的自定义键并使用 C# 遍历它们?你是怎么做的(我把钥匙放在哪里?什么格式?)?我有一个内部网应用程序,它根据客户端的 IP 地址执行某些操作。我没有在代码隐藏文件中对它们进行硬编码,而是将它们放在 web.config 中并对其进行迭代。这样我就可以在我的配置文件中添加或删除,而无需重新编译所有内容。

我的钥匙会有名字、IP 地址,也许还有其他信息。

谢谢你。

4

3 回答 3

13

我认为这应该为你做...

这是在您的 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;
}
于 2010-03-26T14:55:05.570 回答
2

您可以创建自定义配置部分。这允许您将您的自定义配置放在 web.config 中,并以您认为合适的任何方式访问它。

于 2008-11-25T15:03:42.147 回答
2

快速而肮脏的解决方案:将您的密钥添加到 appSettings 中,并将索引作为后缀,即。“key1”、“key2”等,然后循环,直到你找到一个不存在的键。或者将分隔列表添加到单个键,即。“价值 1;价值 2;价值 3;..”。

更好的解决方案:创建自己的自定义部分处理程序,然后您可以在 web.config 的单独部分中以自己的方式添加数据。您需要在 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
于 2008-11-25T15:07:14.323 回答