我的问题是:
httpwebresponse.statuscode是否检测到ASP.NET错误?主要是死亡的黄屏?
一些背景:
我正在开发一个简单的C控制台应用程序,它将测试服务器和服务,以确保它们仍然正常工作。我假设由于httpstatuscode是用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;
}
最佳答案
GetResponse
将抛出一个WebException
错误-但您可以捕获WebException
,使用WebException.Response
获取响应,然后从中获取状态代码。
据我所知,GetResponse
永远不会返回null,因此您可以从代码中删除该测试。
此外,与其让if/else块返回true/false,还不如简单地返回计算表达式的结果,例如:
return response.StatusCode == HttpStatusCode.OK;
(老实说,如果抛出任何
false
,您可能会返回WebException
。)