我的问题: 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;
}
答案 0 :(得分:4)
GetResponse
会针对错误抛出WebException
- 但您可以抓住WebException
,使用WebException.Response
获取响应,然后从中获取状态代码。
据我所知,GetResponse
从不返回null,因此您可以从代码中删除该测试。
此外,不是让if / else块返回true / false,而是返回评估表达式的结果很简单,例如:
return response.StatusCode == HttpStatusCode.OK;
(说实话,如果任何 false
被抛出,你可能会返回WebException
。)