HttpWebRequest — получить код состояния исключения, когда e.Response имеет значение Null

Я использую HttpWebRequest для выполнения некоторых вызовов на сервер. Иногда эти вызовы создают исключения, которые обрабатываются в блоке try-catch. Но ответ исключения всегда нулевой, и я не могу получить код состояния исключения.

try
{
  HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUrl);

  using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
  {
    StreamReader reader = new StreamReader(response.GetResponseStream());
  }
}
catch (WebException e)
{
  //e.Response is always null!
}

Можно ли как-то получить ответ WebException? Например, если я отправлю неправильный URL-адрес, WebException вернет сообщение "Основное соединение было закрыто: соединение было неожиданно закрыто.". В Fiddler я получил бы 504 Status Code плюс текстовое сообщение. Я говорю, если Fiddler может получить результат кода состояния из неправильного WebRequest, то почему C# не может? Я знаю, что должен быть способ, но что это за путь?

Кто-нибудь знает, как получить код состояния? или ответ WebException?


person Joe Almore    schedule 26.10.2013    source источник


Ответы (1)


В случае такой ошибки, как Базовое соединение было закрыто: соединение было закрыто неожиданно." сервер не отправлял никаких данных обратно — он просто закрыл соединение. без возврата какого-либо контента.

В качестве прокси-сервера Fiddler обнаруживает это состояние, создает и возвращает ошибку, указывающую на то, что сервер не ответил. Прокси делают это, чтобы клиент понял, что сбой произошел на сервере, а не на прокси.

person EricLaw    schedule 28.10.2013