Какие конкретные коды состояния вызывают исключение WebException с помощью HttpWebRequest.GetResponse()?
Я искал определенную документацию по этому вопросу, но мне не повезло найти какую-либо.
Для каких кодов статуса ответа HTTP будет HttpWebRequest.GetResponse()
генерировать WebException
после выполнения чего-то вроде POST?
В частности, будет ли он генерировать WebException
для чего-либо кроме статуса 200 OK
? Или это будет только генерировать WebException
скажем, 400, 404 и 500 (ради аргумента)?
Я хочу знать, так как сервер, с которым я общаюсь, определяет что-то кроме HTTP 200 OK
возвращаясь как условие ошибки. Могу ли я положиться на WebException
генерируется для чего-либо, кроме 200?
В настоящее время я написал свой код, чтобы каждый раз проверять код возврата и убедиться, что он 200 OK
, Если это не так, он предпримет соответствующие действия, но между этим кодом и блоком catch возникает много дубликатов. WebException
что я надеюсь навести порядок.
Любые соответствующие ссылки на документацию будут приветствоваться.
3 ответа
Закончилось делать явную проверку после ответа, ловить и проверять исключения WebException; приводит к некоторому дублированию кода, но нет однозначного ответа о том, будет ли ВСЕГДА возникать исключение WebException, если статус НЕ 200.
Я думаю, что так и будет, но это звучит как рискованное предположение. С одной стороны, документы MSDN дают понять, что GetResponse
бросит исключения, кроме просто WebException
, Тем не менее, я могу с уверенностью сказать, что ответ "304 Не модифицированный" будет брошен как WebException
,
Все эти разговоры испускают странный запах кода; не используйте исключения для управления потоком выполнения. Вам лучше обрабатывать исключения соответствующим образом, а затем явно проверять StatusCode
свойство для ваших допустимых значений.
Система WebException является отдельной системой от системы ошибок HTTP. Это происходит главным образом потому, что ошибки HTTP возвращаются браузером или клиентом, а WebException генерируется сервером при создании вашей страницы. К тому времени, когда будет обнаружена ошибка HTTP, страница будет отправлена клиенту, и вы об этом не узнаете.