C# 为什么错误的url会导致未知错误,而不是400或404代码?网络例外

C# 为什么错误的url会导致未知错误,而不是400或404代码?网络例外,c#,.net,webexception,C#,.net,Webexception,为什么不创建WebExceptionStatus.ProtocolError?相反,我得到的是WebExceptionStatus.UnknownError string url = "http://www.ogggle.com/"; // a bad url var request = (HttpWebRequest) WebRequest.Create(url); …选项设置省略 using (var response = (HttpWebResponse) request.GetRes

为什么不创建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实际上是未知的。我在等一份协议书

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。相反,它会导致不太有用的未知错误。有谁能帮助我理解当url错误时如何获得有意义的
WebException

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

HTTP状态代码来自HTTP响应。如果无法将URL解析为主机名,则没有HTTP响应。是否尝试读取响应
var resp=new StreamReader(we.response.GetResponseStream()).ReadToEnd()?可能会有帮助。我进行了编辑,将url更改为可以解析的url。@L.B我已经在调用urlContent=sr.ReadToEnd();这正是我认为您的建议。@sapbucket不,我建议在您的expection块中使用它(请参阅变量
we
,它是您的WebException)。我使用的url字符串生成器可以排列1000多种可能的url字符串组合。其中大约10%是有效的。然后我爆炸一个目标网站,从有效页面中获取数据。我不知道它们是否有效,直到我通过响应过程发送它们之后。出于某种原因,我得到了我在上面写过的行为。在将最初给定的url从“abadur”更改为“”后,它现在给出了一个状态为
namesolutionfailure
WebException
,这似乎是合理的,但仍然不是问题中描述的。这正是我想要发生的。谢谢你的确认。我将再次调试它,看看是否可以重现您看到的内容。