Чтение HttpStatusCode, когда удаленный сервер выдает внутреннюю ошибку

Я пытаюсь прочитать код ответа HTTP с удаленного сервера, но у меня возникают проблемы, когда он выдает внутреннюю ошибку сервера. В следующем коде GetResponse() может генерировать WebException, когда удаленный компьютер возвращает ошибку. В настоящее время я улавливаю ошибку и предполагаю, что это HttpStatusCode.InternalServerError, но это часто неверно.

var req = (HttpWebRequest)WebRequest.Create(uri);
HttpStatusCode responseCode;
try
{
  using (var resp = (HttpWebResponse)req.GetResponse())
  {
    responseCode = resp.StatusCode;
  }
}
catch (WebException)
{
  responseCode = HttpStatusCode.InternalServerError;
}

Итак, вопрос в следующем: независимо от того, какие ошибки выдает удаленный сервер, как я могу получить только код удаленного ответа? Мне нужно знать, какой это тип ошибки; есть ли способ получить это из HttpWebResponse, не пытаясь взломать его? Спасибо!


person Troy Hunt    schedule 22.09.2010    source источник


Ответы (1)


Используйте сгенерированное веб-исключение, чтобы получить ответ, содержащий код состояния:

catch (WebException e)
{
    HttpWebResponse response = (HttpWebResponse) e.Response;
    responseCode = response.StatusCode;
}

Я согласен, что это немного раздражает. Я не знаю, как сказать HttpWebRequest просто дать вам ответ, не вызывая исключения (предоставив вам возможность самостоятельно проверить код состояния).

person Jon Skeet    schedule 22.09.2010
comment
Отлично, но что так долго?! :) Я уже шел по этому пути раньше, но забыл указать исключение для HttpWebResponse. - person Troy Hunt; 22.09.2010