繁体   English   中英

在 c# 中使用 .Contains() 和 Appsettings 键值

[英]Using .Contains() with Appsettings key value in c#

我有下面key value我内appsettings -

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

&希望使用上述key value achieve以下目标 -

如果我的RedirectURL包含上述string [iekeyvalue]中的任何一个,那么我想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(','));

提前致谢..!!

尝试这个:

从您的配置值中删除空格: 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);

在您的第一次尝试中,您将 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 循环,但我将循环留在那里以使概念更清晰。

以简单的形式,它应该是这样的:

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

您应该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
{

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM