HttpWebResponse.StatusCode没有捕获500个错误

时间:2010-12-06 19:44:23

标签: c# asp.net http httpwebrequest yellow-screen-of-death

我的问题: HttpWebResponse.StatusCode是否检测到Asp.Net错误?主要是黄色的死亡屏幕?

一些背景知识 我正在研究一个简单的c#控制台应用程序,它将测试服务器和服务,以确保它们仍能正常运行。我假设自HttpStatusCodes枚举了OK,Moved,InteralServerError等...我可以简单地执行以下操作。

WebRequest request = WebRequest.Create(url);
request.Timeout = 10000;

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

if (response == null || response.StatusCode != HttpStatusCode.OK)
{
   // SERVER IS OK
   return false;
}
else
{
   // SERVER HAS SOME PROBLEMS
   return true;
}

我今天早上发现这不起作用。一个ASP.Net应用程序崩溃显示黄色死亡屏幕,我的应用程序似乎并不介意,因为response.StatusCode等于HttpStatusCode.OK。

我错过了什么?

由于 // lance

更新 感谢Jon,这似乎正在发挥作用。

 HttpWebResponse response;
 try
 {
   response = (HttpWebResponse)request.GetResponse();
 }
 catch (WebException webexp)
 {
   response = (HttpWebResponse)webexp.Response;
 }

1 个答案:

答案 0 :(得分:4)

GetResponse会针对错误抛出WebException - 但您可以抓住WebException,使用WebException.Response获取响应,然后从中获取状态代码。

据我所知,GetResponse 从不返回null,因此您可以从代码中删除该测试。

此外,不是让if / else块返回true / false,而是返回评估表达式的结果很简单,例如:

return response.StatusCode == HttpStatusCode.OK;

(说实话,如果任何 false被抛出,你可能会返回WebException。)