C# HttpWebRequest. GetResponse - как использование StatusCode обрабатывается для неисключения по сравнению с webexception ответом?

Может кто-то помогать разрешить использование свойства "StatusCode" в HttpWebResponse и WebException?

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

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

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

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

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

  • настройки прокси / проблема прокси => так могут сказать пользователю фиксировать настройки прокси

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

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

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

спасибо

5
задан Greg 2 February 2010 в 07:51
поделиться

2 ответа

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

4
ответ дан 14 December 2019 в 04:37
поделиться

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

WebExcpetion имеет свойство с именем Статус, которое возвращает фактический статус ответа, т.е. 500 (Ошибка внутреннего сервера).

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

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

В целом:

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

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

3xx код = Дальнейшие действия должны быть предприняты. Обычно это не код ошибки (обычно для перенаправления), например, для '301 Moved Permanently', что означает, что запрашиваемый ресурс перемещается на новое место, поэтому любые дальнейшие запросы клиента должны быть на новом URL, указанном в ответе.

Или '305 Использовать прокси', что, по вашему мнению, приводит к Исключению.

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

5xx серий кода = Ошибки сервера. Это может привести к исключению, например, для '500 Ошибка внутреннего сервера' или '504 Тайм-аут шлюза'

.
4
ответ дан 14 December 2019 в 04:37
поделиться
Другие вопросы по тегам:

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