リストにドメイン名 (およびほぼ間違いなく ips) しかないことを確認した場合はBannedsites
、ドメインのみを探すことができます。
Uri のドメインを取得するには、次のようにします。
var uri = new Uri("http://stackoverflow.com/questions/11060418/c-sharp-string-parsing-containing-in-a-list");
Console.WriteLine(uri.DnsSafeHost);
出力は次のとおりです。
stackoverflow.com
これで、次のように動作させることができます (Bannedsites では大文字で保存することを忘れないでください):
var uri = new Uri(input)
if(Bannedsites.Contains(uri.DnsSafeHost.ToUpper(CultureInfo.InvariantCulture)))
{
//Don't go to that site
}
else
{
//Go to that site
}
これにより、ドメインが偶然に別の文字列の一部として (たとえば、パラメーターの一部として) 表示されないようにすることもできます。
また、この方法ではサブドメインが提供されることに注意してください。
var uri = new Uri("http://msdn.microsoft.com/en-US/");
Console.WriteLine(uri.DnsSafeHost);
戻り値:
msdn.microsoft.com
だけでなく:
microsoft.com
次のコマンドを使用して、URI が有効であることを確認することもできますuri.IsWellFormedOriginalString()
。
var uri = new Uri(input)
if(uri.IsWellFormedOriginalString() && Bannedsites.Contains(uri.DnsSafeHost))
{
//Don't go to that site
}
else
{
//Go to that site
}
さて、サブドメインの詳細を考慮に入れたいとしましょう。まあ、これを行うことができます:
var uri = new Uri(input)
if(uri.IsWellFormedOriginalString() && Bannedsites.Any(x => uri.DnsSafeHost.EndsWith(x))
{
// Don't go to that site
}
else
{
// Go to that site
}
最後に、Web 全体ではなく特定のページを禁止する場合 (この場合、サブドメインを気にしても意味がありません)、次のようにできます。
var uri = new Uri(input)
if(uri.IsWellFormedOriginalString() && Bannedsites.Contains((uri.DnsSafeHost + uri.AbsolutePath)))
{
//Don't go to that site
}
else
{
//Go to that site
}
AbsolutePath を使用すると、これらの「?」を処理できます。パラメータを渡すためによく使用される「#」、および要求されたページを変更しないその他の文字。
Uri.Compare の使用を検討し、文字列のリストの代わりに Uri のリストを格納することもできます。
RFC 1035が言うように、大文字と小文字を区別しない比較を行う作業はあなたに任せます。大文字と小文字を区別しない方法。」