Из-за моего непонимания я пытался использовать require()
на стороне клиента, отсюда и ошибки. Собираюсь выяснить, как использовать Browserify сейчас. ;)
Было бы хорошо, если бы был некоторый способ выключить "бросок на коде неуспеха", но если Вы ловите 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
для проверки Вы получаете целую ошибку.
Интересно, что HttpWebResponse.GetResponseStream()
, который вы получаете из WebException.Response
, не совпадает с потоком ответов, который вы получили бы от сервера. В нашей среде мы теряем фактические ответы сервера, когда код 400 HTTP status возвращается обратно клиенту с помощью объектов HttpWebRequest/HttpWebResponse
. Из того, что мы видели, поток ответа, связанный с HttpWebResponse WebException
, генерируется на клиенте и не включает ничего из тела ответа от сервера. Это очень неприятно, поскольку мы хотим сообщить клиенту причину неудачного запроса.