C # HttpWebRequest.GetResponse - как обрабатывается использование StatusCode для ответа неисключения или исключения webexception? - PullRequest
5 голосов
/ 02 февраля 2010

Может кто-нибудь помочь прояснить использование свойства StatusCode в HttpWebResponse и WebException?

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

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

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

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

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

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

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

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

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

спасибо

Ответы [ 2 ]

4 голосов
/ 02 февраля 2010

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

В WebExcpetion есть свойство с именем Status, которое будет возвращать фактический статус ответа, т.е. 500 (Внутренняя ошибка сервера).

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

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

В целом:

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

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

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

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

Код серии 4xx = ошибки клиента. Это может привести к исключению. например, «400 неверных запросов» или «401 несанкционированных»

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

4 голосов
/ 02 февраля 2010

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

...