8

Я охотился за какой-то определенной документацией по этому вопросу, но мне не очень повезло.HttpWebRequest.GetResponse() - какие особые коды статуса вызывают исключение?

В принципе - вопрос в том, для чего HTTP-коды состояния, возвращающиеся с сервера, будут HttpWebRequest.GetResponse() генерировать WebException после выполнения чего-то вроде say, POST?

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

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

Любые релевантные ссылки на документацию будут наиболее ценными.

Спасибо!

+0

См. следующий ответ на соответствующие вопросы для тщательного анализа: http://stackoverflow.com/questions/ 2182544/c-httpwebrequest-getresponse-how-is-statuscode-usage-handled-for-a-non-excepti/2183380 # 2183380 –

ответ

1

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

0

Я думаю, что это будет, но это звучит как опасное предположение. Во-первых, MSDN docs дают понять, что GetResponse будет генерировать исключения, отличные от WebException. Тем не менее, я могу с уверенностью сказать, что ответ «304 Not-Modified» будет выброшен как WebException.

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

+0

Собственное WebException поймано правильно и проверено - проблема, однако, заключается в том, что метод getresponse не генерировать WebException, а скорее просто пропускать вещи при определенных обстоятельствах (т. е. из всего, что я видел, если сервер не выдает HTTP 200 OK - появляется веб-представление ... но нет ничего определенного в том, что это так или нет в какой-либо документации, Я видел...) –

1

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

Смежные вопросы