Какие конкретные коды состояния вызывают исключение WebException с помощью HttpWebRequest.GetResponse ()? - PullRequest
10 голосов
/ 01 июня 2010

Я искал определенную документацию по этому вопросу, но мне не повезло найти какую-либо.

Для каких кодов статуса ответа HTTP HttpWebRequest.GetResponse() сгенерирует WebException после выполнения чего-то вроде POST?

В частности, будет ли он генерировать WebException для чего-либо, кроме статуса 200 OK? Или он будет генерировать WebException, скажем, 400, 404 и 500 (ради аргумента)?

Я хочу знать, так как сервер, с которым я общаюсь, определяет что-либо, кроме HTTP 200 OK, возвращаясь как условие ошибки. Могу ли я рассчитывать на генерирование WebException для чего-либо, кроме 200?

В настоящее время я написал свой код, чтобы каждый раз проверять код возврата и убедиться, что он 200 OK. Если это не так, то он предпримет соответствующее действие - но между этим кодом и блоком catch для WebException, который я надеюсь очистить, много дублирования.

Буду признателен за любые соответствующие ссылки на документацию.

Ответы [ 3 ]

2 голосов
/ 01 июня 2010

Завершено выполнение явной проверки после ответа, отлова и проверки исключений WebExceptions; приводит к некоторому дублированию кода, но нет однозначного ответа о том, будет ли ВСЕГДА возникать исключение WebException, если статус НЕ 200.

1 голос
/ 01 июня 2010

Я думаю, что так и будет, но это звучит как рискованное предположение. С одной стороны, MSDN документы дают понять, что GetResponse будет генерировать исключения, отличные от WebException. Тем не менее, я могу с уверенностью сказать, что ответ «304 Немодифицированный» будет выброшен как WebException.

Все эти разговоры испускают странный запах кода; не используйте исключения для управления потоком выполнения. Вы бы лучше обрабатывали исключения соответствующим образом, а затем явно проверяли свойство StatusCode на допустимые значения.

0 голосов
/ 01 июня 2010

Система WebException - отдельная система от системы ошибок HTTP . Это происходит главным образом потому, что ошибки HTTP возвращаются браузером или клиентом, а WebException генерируется сервером при создании вашей страницы. К тому времени, когда будет обнаружена ошибка HTTP, страница будет отправлена ​​клиенту, и вы об этом не узнаете.

...