C# で Web クローラーを作成しています。ページ上のすべてのリンクを取得するメソッド内で、リンクのリストを返したいのですが、LINQ で「フィルタリング」して、リストに存在する URL のみが含まれるようにします。ブール値を返す RemoteFileExists という名前のヘルパー メソッドを作成しました。メソッドの最後に、次の LINQ 行を書きました。
//Links is a List<string> that hasn't been filtered
return (from link in Links
where RemoteFileExists(link)
select link).ToList<string>();
何らかの理由で、これを行うと、リストが空で返されます。
リモートファイルが存在します:
static bool RemoteFileExists(string url)
{
try
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "HEAD";
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
return (response.StatusCode == HttpStatusCode.OK);
}
catch
{
return false;
}