在c#中使用带有Appsettings键值的.Contains()

时间:2017-12-26 10:49:06

标签: c# asp.net contains appsettings

我在key value -

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

&安培;想要achieve使用以上key value -

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

e.g。

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(','));

提前致谢.. !!

4 个答案:

答案 0 :(得分:3)

试试这个:

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

答案 1 :(得分:0)

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

在你的第二个例子中,你将RedirectURL与一系列元素作为一个整体进行匹配(这甚至可以编译吗?我现在还没有VS可用于测试)。< / p>

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

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循环,但我将循环留在那里以使概念更清晰。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

}