1

次の方法でURLhttp://master.dev.brandgear.netが有効かどうかを確認しようとしています:

private bool UrlIsValid(string url)
        {
            using (var webClient = new WebClient())
            {
                bool response;
                try
                {
                    webClient.UseDefaultCredentials = true;
                    using (Stream strm = webClient.OpenRead(url))
                    {
                        response = true;
                    }
                }

                catch (WebException we)
                {
                    response = false;
                }

                return response;
            }
        }

ただし、Web 例外が発生しています"404 not found."。uri をチェックしたところ、Uri.IsWellFormedUriStringtrue が返されました。ただし、ブラウザで同じ URL を開くことはできます。それを検証する方法はありますか?

4

2 に答える 2

2

次の URL http://master.dev.brandgear.netで例を実行しましたが、例外も発生しました。ブラウザー (Firefox など) で同じ URL を開いて Firebug プラグインを実行すると、[ネットワーク] タブを開くと、エラー 404 (ページが見つかりません) が表示されます。コードは問題ありませんが、サーバーは 404 を返します。

于 2013-10-28T13:47:40.270 に答える
0

実際に応答を取得するには、404 例外が発生したときに GetResponse または GetResponseStream メソッドの代わりに WebException を使用する必要があります。また、これらの状況で HttpWebRequest および HttpWebResponse を使用して制御を強化するため、例外が発生した後、その状態をチェックして ProtocolError であるかどうかを確認します。もしそうなら、そこから応答を得る:

    private bool UrlIsValid(string url)
    {
        bool response = false;
        HttpWebResponse rep = null;

        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            rep = (HttpWebResponse)request.GetResponse();
        }
        catch (WebException we)
        {
            if (we.Status == WebExceptionStatus.ProtocolError)
                rep = (HttpWebResponse)we.Response;
        }

        if (rep != null)
        {
            try
            {
                using (Stream strm = rep.GetResponseStream())
                {
                    response = true;
                }
            }
            catch (WebException ex)
            {
                //no need variable is already false if we didnt succeed.
                //response = false;
            }
        }

        return response;
    }
于 2013-10-28T17:02:39.430 に答える