С# - Получение тела ответа от ошибки 403

Я получаю ошибку 403 при запросе данных из URL-адреса. Это ожидается, и я не прошу, как его исправить.
При вставке этого URL-адреса прямо в мой браузер, я получаю базовую строку информации, описывающую, почему разрешение отклонено.

Мне нужно прочитать это основное сообщение об ошибке с помощью моего кода на С#, однако, когда запрос был сделан, System.Net.WebException( "Удаленный сервер возвратил ошибку: (403) Запрещен." ), Ошибка выбрана, а тело ответа недоступен для меня.

Можно ли просто захватить содержимое страницы без исключения? Соответствующий код в значительной степени соответствует тому, что вы ожидаете, но здесь все равно.

   HttpWebRequest  request  = (HttpWebRequest)WebRequest.Create(sPageURL);

   try
   {
        //The exception is throw at the line below.
        HttpWebResponse response = (HttpWebResponse)(request.GetResponse());

        //Snipped processing of the response.
   }
   catch(Exception ex)
   {
        //Snipped logging.
   }

Любая помощь будет оценена по достоинству. Спасибо.

Ответы

Ответ 1

Вы ищете свойство WebException.Response:

catch(WebException ex)
{
     var response = (HttpWebResponse)ex.Response;
}

Ответ 2

Это сработало для меня..

HttpWebResponse httpResponse;
            try
            {
                httpResponse = (HttpWebResponse)httpReq.GetResponse();
                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    result = streamReader.ReadToEnd();
                }
            }
            catch (WebException e)
            {
                Console.WriteLine("This program is expected to throw WebException on successful run." +
                                    "\n\nException Message :" + e.Message);
                if (e.Status == WebExceptionStatus.ProtocolError)
                {
                    Console.WriteLine("Status Code : {0}", ((HttpWebResponse)e.Response).StatusCode);
                    Console.WriteLine("Status Description : {0}", ((HttpWebResponse)e.Response).StatusDescription);
                    using (Stream data = e.Response.GetResponseStream())
                    using (var reader = new StreamReader(data))
                    {
                        string text = reader.ReadToEnd();
                        Console.WriteLine(text);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }