Есть ли простой способ получить код состояния HTTP от System.Net.WebException
?
c#
http-status-codes
webexception
Gilsham
источник
источник
Используя нулевой условный оператор (
?.
), вы можете получить код состояния HTTP с одной строкой кода:Переменная
status
будет содержатьHttpStatusCode
. Когда происходит более общий сбой, такой как ошибка сети, когда код состояния HTTP никогда не отправляется, тоstatus
он будет нулевым. В этом случае вы можете проверить,ex.Status
чтобы получитьWebExceptionStatus
.Если вы просто хотите, чтобы описательная строка регистрировалась в случае сбоя, вы можете использовать оператор null-coalescing (
??
), чтобы получить соответствующую ошибку:Если исключение выдается в результате кода состояния HTTP 404, строка будет содержать «NotFound». С другой стороны, если сервер находится в автономном режиме, строка будет содержать «ConnectFailure» и так далее.
источник
?.
оператор первоначально назван нулевым оператором распространения или нулевым условным оператором во время предварительного просмотра. Но Atlassian Resharper предупреждает об использовании нулевого оператора распространения в таких сценариях. Приятно знать, что его еще называют нулевым условным оператором.это работает, только если WebResponse является HttpWebResponse.
источник
(Я понимаю, что вопрос старый, но он входит в число самых популярных в Google.)
Распространенной ситуацией, когда вы хотите знать код ответа, является обработка исключений. Начиная с C # 7, вы можете использовать сопоставление с образцом для фактического ввода предложения catch, только если исключение соответствует вашему предикату:
Это может быть легко расширено до следующих уровней, например, в этом случае, где
WebException
фактически было внутреннее исключение другого (и мы заинтересованы только в этом404
):Напоследок: обратите внимание, что нет необходимости повторно генерировать исключение в предложении catch, если оно не соответствует вашим критериям, поскольку мы не вводим это предложение в первую очередь с помощью вышеуказанного решения.
источник
Вы можете попробовать этот код, чтобы получить код состояния HTTP из WebException. Он также работает в Silverlight, поскольку SL не имеет определенного WebExceptionStatus.ProtocolError.
источник
return 0
? или лучшеHttpStatusCode?
( обнуляемый )?var code = GetHttpStatusCode(ex); if (code != HttpStatusCode.InternalServerError) {EventLog.WriteEntry( EventLog.WriteEntry("MyApp", code, System.Diagnostics.EventLogEntryType.Information, 1);}
Я не уверен, что есть, но если бы была такая собственность, она не была бы признана надежной. A
WebException
может быть запущено по причинам, отличным от кодов ошибок HTTP, включая простые сетевые ошибки. У тех нет такого совпадающего кода ошибки http.Можете ли вы дать нам немного больше информации о том, что вы пытаетесь достичь с помощью этого кода. Там может быть лучший способ получить необходимую информацию.
источник