HttpWebResponse.StatusCode не перехватывает 500 ошибок - PullRequest
1 голос
/ 06 декабря 2010

Мой вопрос: Обнаруживает ли 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

Обновление Благодаря Джону, похоже, это работает.

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

1 Ответ

4 голосов
/ 06 декабря 2010

GetResponse выдаст WebException за ошибки - но вы можете перехватить WebException, использовать WebException.Response, чтобы получить ответ, а затем получить код состояния от этого. *

Насколько я знаю, GetResponse никогда не возвращает ноль, поэтому вы можете удалить этот тест из своего кода.

Кроме того, вместо того, чтобы иметь блоки if / else для возврата true / false, проще просто вернуть результат вычисления выражения, например:

return response.StatusCode == HttpStatusCode.OK;

(Если честно, вы, вероятно, могли бы вернуть false, если любой WebException брошен ...)

...