2017-12-26 6 views
2

ich unter key value habe in meinem appsettings -Mit .Contains() mit appSettings Schlüsselwert in C#

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

& zu achieve wollen die oben key value unter Verwendung -

Wenn mein RedirectURL jeder enthält das obige string [i.e.keyvalue] dann möchte ich return false/or do nothing.

eg

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. 

Ich habe versucht, Code unten in C# aber keine luck-

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

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

Vielen Dank im Voraus .. !!

+0

wo ist Ihre if-Bedingung? –

Antwort

3

Try this:

entfernen Leerzeichen aus dem Konfigurationswert: current.aspx,error.aspx,videos.aspx.

Obwohl dies behandelt, aber es wird einen zusätzlichen Verarbeitungsschritt des Trim()

Dann versuchen Sie den Code unten reduzieren:

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); 
+0

Vielleicht auch ein Trim? –

0

In Ihrem ersten Versuch, sind Sie die URL gegen die passende Die gesamte App-Einstellungszeichenfolge und eine URL wird niemals mit dem Wert current.aspx, error.aspx, videos.aspx übereinstimmen.

In Ihrem zweiten Beispiel stimmen Sie RedirectURL mit einem Array von Elementen als Ganzes überein (wird das überhaupt kompiliert? Ich habe zur Zeit VS nicht verfügbar).

Was Sie tun müssen, ist es gegen alle unabhängig voneinander die verschiedenen Typen zu entsprechen, etwa so:

var urlSegmentsToBlock = ConfigurationManager.AppSettings["BlockAMPPages"].ToString().Split(','); 

foreach(var urlSegment in urlSegmentsToBlock) 
{ 
    if(RedirectURL.Equals(urlSegment, StringComparison.InvariantCultureIgnoreCase)) 
     return false; 
} 

return true; 

Und auch, würde ich die zusätzlichen Leerzeichen nach dem Komma in Ihrem appSetting Wert zu entfernen, zu Vermeiden Sie es, die Enden der Saite zuzuschneiden, gegen die Sie passen. Also lass den Wert: .

Sie könnten auch Any(...) verwenden, um die foreach-Schleife zu überspringen, aber ich verließ die Schleife dort, um das Konzept klarer zu machen.

0

In einfacher Form sollte es so etwas wie die:

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

Sie sollten die Konfigurationseinstellung Split und dann können Sie nach passenden Bedingungen suchen IndexOf verwenden. Auch Ignorieren der Groß- und Kleinschreibung könnte besser sein.

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

}