C# 为什么错误的url会导致未知错误,而不是400或404代码?网络例外
为什么不创建WebExceptionStatus.ProtocolError?相反,我得到的是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.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
,这似乎是合理的,但仍然不是问题中描述的。这正是我想要发生的。谢谢你的确认。我将再次调试它,看看是否可以重现您看到的内容。