【问题标题】:Uri.IsWellFormedUriString returns true, but cannot read from a urlUri.IsWellFormedUriString 返回 true,但无法从 url 读取
【发布时间】:2013-10-28 13:34:22
【问题描述】:

我正在尝试通过以下方法检查 url http://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;
            }
        }

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

【问题讨论】:

  • 我认为您收到错误 404 未找到。
  • 是的,没错。由于“斜线”错误,问题被错误地提出。

标签: c# uri


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    要真正得到响应,当 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;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-30
      相关资源
      最近更新 更多