【问题标题】:Using .Contains() with Appsettings key value in c#在 c# 中使用 .Contains() 和 Appsettings 键值
【发布时间】:2018-06-07 05:30:08
【问题描述】:

我在appsettings 中低于key value -

<add key="BlockAMPPages" value="current.aspx, error.aspx, videos.aspx"/>

&想achieve下面使用上面的key value-

如果我的RedirectURL 包含上述任何string [i.e.keyvalue],那么我想return false/or do nothing.

例如

RedirectURL- abc.mer.com/abc/error.aspx --> return exist
RedirectURL- abc.mer.com/abc/videos.aspx --> return exist
RedirectURL- abc.mer.com/abc/current.aspx --> return exist
RedirectURL- abc.mer.com/abc/post.aspx --> return not exist.

我在C# 中尝试了以下代码,但没有成功-

RedirectURL.Contains(ConfigurationManager.AppSettings["BlockAMPPages"].ToString());

RedirectURL.Contains(ConfigurationManager.AppSettings["BlockAMPPages"].ToString().split(','));

提前谢谢..!!

【问题讨论】:

  • 你的 if 条件在哪里?

标签: c# asp.net contains appsettings


【解决方案1】:

您应该Split配置设置,然后您可以使用IndexOf搜索匹配条件。此外,忽略区分大小写可能会更好。

var blockedPages = ConfigurationManager.AppSettings["BlockAMPPages"].Trim(' ').Split(',');
if (blockedPages.Any(x => RedirectURL.IndexOf(x, StringComparison.OrdinalIgnoreCase) > -1))
{
    //the RedirectURL contains blocked page
}
else
{

}

【讨论】:

    【解决方案2】:

    试试这个:

    从您的配置值中删除空格:current.aspx,error.aspx,videos.aspx

    虽然这样处理,但是会减少Trim()的额外处理步骤

    然后试试下面的代码:

    string blockedPages = "current.aspx,error.aspx,videos.aspx";
    string url = "abc.mer.com/abc/error.aspx";
    
    var doesExist = blockedPages.Split(',').Any(x => url.Contains(x.Trim()));
    Console.WriteLine(doesExist);
    

    【讨论】:

    • 也可以进行修剪?
    【解决方案3】:

    简单的形式应该是这样的:

    !ConfigurationManager.AppSettings["BlockAMPPages"].ToString().split(',').Any(pageName=>RedirectURL.Contains(pageName));
    

    【讨论】:

      【解决方案4】:

      在您的第一次尝试中,您将 URL 与整个应用设置字符串进行匹配,并且 URL 永远不会匹配值 current.aspx, error.aspx, videos.aspx

      在您的第二个示例中,您将 RedirectURL 与整个元素数组进行匹配(这甚至可以编译吗?我目前没有可用于测试的 VS)。

      您需要做的是将它与所有不同的类型独立匹配,如下所示:

      var urlSegmentsToBlock = ConfigurationManager.AppSettings["BlockAMPPages"].ToString().Split(',');
      
      foreach(var urlSegment in urlSegmentsToBlock) 
      {
          if(RedirectURL.Equals(urlSegment, StringComparison.InvariantCultureIgnoreCase))
              return false;
      }
      
      return true;
      

      另外,我会删除 appSetting 值中逗号后的多余空格,以避免修剪要匹配的字符串的结尾。所以让值是这样的:current.aspx, error.aspx, videos.aspx

      您也可以使用 Any(...) 跳过 foreach 循环,但我将循环留在了那里以使概念更清晰。

      【讨论】:

        猜你喜欢
        • 2022-01-09
        • 2016-06-01
        • 1970-01-01
        • 2017-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-02
        • 1970-01-01
        相关资源
        最近更新 更多