如果您確定只有域名Bannedsites
中的域名(可以說是ips),那麼您只能查找域名。
爲了得到一個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與有效:最後,如果你是禁止
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
}
:
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.Contains((uri.DnsSafeHost + uri.AbsolutePath)))
{
//Don't go to that site
}
else
{
//Go to that site
}
使用AbsolutePath你照顧那些「?」和「#」通常用於傳遞參數,以及其他任何不改變請求頁面的字符。
你也可以考慮使用Uri.Compare並存儲Uri列表而不是字符串列表。
我離開你作出比較時不變爲RFC 1035的任務說: 「 對於那些正式協議的一部分的DNS的所有部分,字符串(例如,標籤之間的所有 比較,域名等) 在不區分大小寫的方式進行。 「
它的工作,非常感謝你! – Nom
提防誤報,例如「wokersexchange」包含「sexchange」 – Theraot
@Theraot:或者用連字符的網站。預連字符。 – Ryan