.Net HttpWebRequest. GetResponse () повышает исключение, когда код состояния HTTP 400 (плохой запрос) возвращается

Из-за моего непонимания я пытался использовать require() на стороне клиента, отсюда и ошибки. Собираюсь выяснить, как использовать Browserify сейчас. ;)

199
задан chefsmart 27 March 2009 в 20:40
поделиться

2 ответа

Было бы хорошо, если бы был некоторый способ выключить "бросок на коде неуспеха", но если Вы ловите WebException, можно, по крайней мере, использовать ответ:

using System;
using System.IO;
using System.Web;
using System.Net;

public class Test
{
    static void Main()
    {
        WebRequest request = WebRequest.Create("http://csharpindepth.com/asd");
        try
        {
            using (WebResponse response = request.GetResponse())
            {
                Console.WriteLine("Won't get here");
            }
        }
        catch (WebException e)
        {
            using (WebResponse response = e.Response)
            {
                HttpWebResponse httpResponse = (HttpWebResponse) response;
                Console.WriteLine("Error code: {0}", httpResponse.StatusCode);
                using (Stream data = response.GetResponseStream())
                using (var reader = new StreamReader(data))
                {
                    string text = reader.ReadToEnd();
                    Console.WriteLine(text);
                }
            }
        }
    }
}

Вы хотели бы инкапсулировать, "получают меня ответ, даже если это не бит" кода успеха в отдельном методе. (Я предложил бы, чтобы Вы все еще бросили, если нет ответа, например, если Вы не могли бы соединиться.)

Если ошибочный ответ может быть большим (который необычен), можно хотеть настроить HttpWebRequest.DefaultMaximumErrorResponseLength для проверки Вы получаете целую ошибку.

335
ответ дан Jon Skeet 23 November 2019 в 05:09
поделиться

Интересно, что HttpWebResponse.GetResponseStream(), который вы получаете из WebException.Response, не совпадает с потоком ответов, который вы получили бы от сервера. В нашей среде мы теряем фактические ответы сервера, когда код 400 HTTP status возвращается обратно клиенту с помощью объектов HttpWebRequest/HttpWebResponse. Из того, что мы видели, поток ответа, связанный с HttpWebResponse WebException, генерируется на клиенте и не включает ничего из тела ответа от сервера. Это очень неприятно, поскольку мы хотим сообщить клиенту причину неудачного запроса.

13
ответ дан 23 November 2019 в 05:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: