【发布时间】:2014-12-02 21:38:15
【问题描述】:
为什么这不会创建 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?
【问题讨论】:
-
HTTP 状态码来自 HTTP 响应。如果无法将 URL 解析为主机名,则没有 HTTP 响应。
-
您是否尝试阅读回复
var resp = new StreamReader(we.Response.GetResponseStream()).ReadToEnd();?也许它可以提供帮助。 -
我进行了编辑,将 url 更改为可以解析的。
-
@L.B 我已经在调用 urlContent = sr.ReadToEnd();这就是我认为你的建议。
-
@sapbucket 不,我建议它在你的期望块中使用它(参见变量
we,它是你的 WebException)。
标签: c# .net webexception