0

为什么这不会创建 WebExceptionStatus.ProtocolError?相反,我得到WebExceptionStatus.UnknownError.

string url = "http://www.ogggle.com/"; // a bad url

var request = (HttpWebRequest) WebRequest.Create(url);

...省略了选项设置

using (var response = (HttpWebResponse) request.GetResponse())
    {
        foreach (Cookie cookie in response.Cookies)
            cookies.Add(cookie);

        string urlContent = "";
        using (var sr = new StreamReader(response.GetResponseStream()))
            urlContent = sr.ReadToEnd();

        return urlContent;
    }

现在将抛出一个 WebException;然而 WebExceptionStatus 实际上是 UnknownError。我期待一个协议错误。

catch (WebException we)
   {
    string message = "WEB EXCEPTION DETECTED. Retry counter: " + _retryCount;
    message += Environment.NewLine + "Problem with url: " + url + ". Status is: " + we.Status;
    message += Environment.NewLine + "Message is: " + we.Message;

    if (we.Status == WebExceptionStatus.ProtocolError)
    {
        message += Environment.NewLine + string.Format("Status Code : {0}", ((HttpWebResponse)we.Response).StatusCode);
        message += Environment.NewLine + string.Format("Status Description : {0}", ((HttpWebResponse)we.Response).StatusDescription);
    }

    WriteToErrorLog(message);
    if (DEBUG)
        Console.WriteLine(message);
    _retryCount++;
   }

从我的角度来看,WebException应该比这更聪明。格式错误或错误的 url 应导致有意义的 WebExceptionStatus。相反,它会导致无用的 UnknownError。WebException当网址不好时,谁能帮助我理解如何获得有意义的网址?

4

1 回答 1

0

您没有在问题中提供足够的信息来找出问题所在。您遇到问题的真正“坏” URL 是什么?WebRequest.Create(string)调用,当给定的字符串不是有效的 URL 时new Url(string)会抛出异常。UriFormatException这就是它对您给定的代码和字符串所做的事情。

于 2014-12-02T21:55:48.477 回答