Задать вопрос
@demiash

C# HttpWebRequest получить описание ошибки сервера при StatusCode 500?

Оправляю запрос на сервер, где ошибка 500 и в браузере возвращается описание внутренней ошибки сервера
В WebException получаю Status = ConnectionClosed (Запрос был прерван: Соединение было неожиданно закрыто.)
Соответственно в WebException.Response = null

Как мне это обойти и получить ответ сервера, даже если там внутренняя ошибка?

код:
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create("http://localhost/test/request");
            webRequest.Credentials = CredentialCache.DefaultCredentials;
            webRequest.Method = "POST";
            webRequest.ContentType = "application/x-www-form-urlencoded";
            ASCIIEncoding encoding = new ASCIIEncoding();
            byte[] byte1 = encoding.GetBytes("SourceId=15");
            webRequest.ContentLength = byte1.Length;
            using (Stream newStream = webRequest.GetRequestStream()) {
                newStream.Write(byte1, 0, byte1.Length);
            }
            try {
                HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
                using (Stream receiveStream = webResponse.GetResponseStream()) {
                    Encoding encode = System.Text.Encoding.GetEncoding("windows-1251");
                    using (StreamReader readStream = new StreamReader(receiveStream, encode)) {
                        return readStream.ReadToEnd();
                    }
                }
            } catch (WebException ex) {
                HttpWebResponse httpResponse = (HttpWebResponse)ex.Response;
                if (ex.Response != null) {
                    using (Stream stream = ex.Response.GetResponseStream()) {
                        StreamReader reader = new StreamReader(stream, Encoding.UTF8);
                        return reader.ReadToEnd();
                    }
                }

            }
  • Вопрос задан
  • 1185 просмотров
Подписаться 1 Простой 2 комментария
Решение пользователя demiash К ответам на вопрос (2)
@demiash Автор вопроса
помогла установка параметра запроса: webRequest.ProtocolVersion = HttpVersion.Version10;

в этом случае в WebException.Response показывает содержимое ответа
и WebException.Status не ConnectionClosed (Запрос был прерван: Соединение было неожиданно закрыто.)
а ProtocolError (Удаленный сервер возвратил ошибку: (500) Внутренняя ошибка сервера.)
Ответ написан
Комментировать