1

我正在尝试http://master.dev.brandgear.net通过以下方法检查 url 是否有效:

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;
            }
        }

但是,我收到了一个网络异常"404 not found."。我检查了uri,Uri.IsWellFormedUriString它返回true。但是,可以通过浏览器打开相同的 url。知道如何验证它吗?

4

2 回答 2

2

我使用以下 URL http://master.dev.brandgear.net运行了您的示例,并且还引发了异常。如果您在浏览器(例如 Firefox)中打开相同的 URL 并运行 Firebug 插件,打开网络选项卡您将看到错误 404(找不到页面)。您的代码正常,但服务器返回 404。

于 2013-10-28T13:47:40.270 回答
0

要真正得到响应,当 404 异常发生时,您必须使用 WebException 而不是 GetResponse 或 GetResponseStream 方法。在这些情况下还可以使用 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 回答