【问题标题】:ASP.NET: Reading list of values from web.configASP.NET:从 web.config 中读取值列表
【发布时间】:2021-12-30 13:42:26
【问题描述】:

在一个cs文件中我有一个像这样的IF函数>

If (myValue == 'AA' || myValue == 'BB' || myValue == 'CC')
{
DoThis()
}

但有时我必须添加更多条件:myValue == 'DD' 等等。

无法插入新值(和所有值) 在 web.config 中 并从那里读取而不是修改代码?

例如,在我的 web.config 文件中,我可以有这样的内容:

<appSettings>
     <add key="AA" value="AA"/>
     <add key="BB" value="BB"/>
     <add key="CC" value="CC"/>
     <add key="DD" value="DD"/>
</appSettings> 

在代码中我应该有类似的东西:

如果 web.config 的列表中存在 mySearchString,则调用 DoThis() 方法

提前谢谢你。

路易斯

【问题讨论】:

  • 一切皆有可能。确切的问题是什么?你不知道,如何从 web.config 中读取数据;还是有其他问题?
  • 基本上我应该从 web.config 中读取字符串列表,然后创建一个 Foreach 循环所有字符串并调用 DoThis()。所以我只需要部署 web.config 而无需重新编译整个网站。这将是我的想法。
  • @Ciupaz 是的,这是个好主意。如果您有问题,我建议您编写一些代码并将其作为新问题发布。
  • 我在问题中添加了更多代码,希望更清楚。
  • web.config 更改会导致重新编译...如果您不想在每次从该列表中添加/减去时都重新编译,我建议使用包含一些 JSON 配置参数的 .txt

标签: c# asp.net


【解决方案1】:

首先在 web.config 中使用逗号分隔值创建一个键,如下所示。

<appSettings>
     <add key="Categories" value="AA,BB,CC,DD"/>
</appSettings>

然后访问变量并拆分它。

var categories = System.Configuration.ConfigurationManager.AppSettings["Categories"].Split(',');
        
if(categories.Contains(myValue)){
    DoThis()
}

【讨论】:

  • 我可以使用 Foreach 并为每个字符串调用 DoThis(),对吧?
  • 是的,你可以这样做。
  • foreach(类别中的字符串值){ DoThis(): } 可以吗?
  • 没关系@Ciupaz
  • 请注意,这会改变逻辑,因为您可能会多次调用 DoThis() 而不是一次。
【解决方案2】:

试试这个

var appSets = 
ConfigurationManager.GetSection("appSettings") as NameValueCollection;
   
  if (appSets["AA"]=="AA" || appSets["BB"]=="BB") do something
    

或者您可以使用 Linq 或 foreach 进行迭代

    foreach (var item in appSets.Keys)
    {
      var key = item.ToString();
      var value = appSets[key];
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 2014-09-15
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    相关资源
    最近更新 更多