1

我的问题: 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。

我错过了什么?

谢谢//长矛

更新 感谢乔恩,这似乎有效。

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

1 回答 1

4

GetResponse将抛出一个WebException错误 - 但您可以捕获WebException, 用于WebException.Response获取响应,然后从中获取状态代码。

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

此外,与其让 if/else 块返回 true/false,不如简单地返回计算表达式的结果,例如:

return response.StatusCode == HttpStatusCode.OK;

(老实说,false如果抛出任何东西,你可能会返回......) WebException

于 2010-12-06T19:45:48.113 回答