5

Может кто-то помочь прояснить использование свойства «StatusCode» в HttpWebResponse и WebException?C# HttpWebRequest.GetResponse - как используется использование StatusCode для ответа на исключение vs webexception?

Например, кажется, что если:

а) не является исключением, то HttpWebResponse будет иметь StatusCode, который может иметь несколько значений, которые указывают как: - успех (например, OK, Принимается и т.д.) - недостаточность (например, UseProxy, RequestTimeout и т.д.)

б) есть WebExeption бросок, который сам по себе есть объект ответа, который снова имеет StatusCode (который я предполагаю, основана на том же HttpStatusCode Перечисления.

Вопрос 1 - Существует ли какая-либо согласованность с точки зрения того, что StatusCode приведет к возникновению WebException (и вы получите деталь в пределах исключения), в отличие от того, который вернется без исключения, но вы узнаете результат в StatusCode объект ответа?

Вопрос 2 - Или более конкретно, что это код pseduo (или C# сам код) для пытаться обрабатывать httpWebRequest.GetResponse вызов таким образом, что вы хотите провести различие между категориями ответов для пользователя:

  • настройки прокси-сервера/прокси вопрос => так можно сказать пользователю, чтобы установить параметры прокси-сервера

  • проблема подключения/веб-сервер вниз => так что пользователь знает об этом

  • Ошибка на стороне сервера (например, сервер есть, но есть обработки запроса вопрос - например, содержание не существует) => так что пользователь может поднять с сайтом менеджером

  • успех делом (и я полагаю, что это будет больше, чем просто КИ) => па (успех случай)

благодаря

ответ

4

В моем опыте код состояния ответа только возвращает 200 или 0. Все остальное приходит через WebException, включая ошибки прокси, как 407 или 417.

4

Исключение WebException генерируется всякий раз, когда веб-запрос не может быть успешно выполнен. Например, для ответов 400 и 500.

У WebExcpetion есть свойство с именем Status, которое вернет фактический статус ответа i.e 500 (Internal Server Error).

Вот список всех кодов ответов: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

================================ =============================================

В целом:

1xx серия кода = предварительный отклик. Это не коды ошибок. Например, ответ 100 Continue, который сообщает, что клиент должен продолжить свой запрос.Обычно WebRequest не возвращает такой ответ и обрабатывает его сам, отправив остальную часть запроса.

2xx серия кода = Запрос был успешно принят, понят и принят. Это не коды ошибок. Например, 200 OK

3xx серия кода = Необходимо предпринять дальнейшие действия. Как правило, это не код ошибки (как правило, его для перенаправления), например, «301 Moved Permanentently», что означает, что запрос ресурса перемещается в новое место, поэтому любые дальнейшие запросы клиента должны быть указаны в новом URL-адресе в ответе.

OR '305 Use Proxy', который согласно вам приводит к Исключению.

4xx серия кода = ошибки клиента. Это может привести к исключению. например, «400 Bad Request» или «401 Unauthorized»

5xx серия кода = ошибки сервера. Это может привести к исключению. например, «500 Internal Server Error» или «504 Gateway Timeout»

+0

Но сколько возможных кодов возврата могло бы быть для случая без исключения, когда вы действительно получите ответ обратно? Например, существует ряд различных кодов ответов в диапазоне 200. Или первый ответ здесь правильный, так как для случая отсутствия исключения возможны только 200 или 0? – Greg

+0

Ответ обновлен. – ata

+0

Спасибо. Значит, это означает, что я предполагаю, что вы можете взять пример: успешный ответ (т. Е. Исключение), но код состояния 300, где в целом тогда это все еще проблема для пользователя? То есть, чтобы проверить подлинный успех, вам нужно проверить для WebException + проверить код состояния в 200 диапазонах тогда? – Greg