Ошибка HTTP в C#
Сам по себе код 404 или 500 не
бросает исключение. HttpClient всё равно
возвращает ответ, и в теле может быть HTML или
JSON с описанием ошибки.
Явная проверка IsSuccessStatusCode для
несуществующей страницы на example.com обычно
печатает 404 без бросания исключения:
using HttpClient client = new();
using HttpResponseMessage response = await client.GetAsync("https://example.com/not-found-page");
if (!response.IsSuccessStatusCode)
{
Console.WriteLine((int)response.StatusCode);
}
Вызов EnsureSuccessStatusCode нужен, когда
ошибочный ответ обрабатывают через catch.
Адрес "httpbin.org/status/500" стабильно
даёт 500. Тело можно прочитать, но считать
его успешным ответом сервиса не стоит. В
обработчике печатают код:
using HttpClient client = new();
using HttpResponseMessage response = await client.GetAsync("https://httpbin.org/status/500");
try
{
response.EnsureSuccessStatusCode();
}
catch (HttpRequestException)
{
Console.WriteLine((int)response.StatusCode);
}
Запросите "httpbin.org/status/418",
не вызывая EnsureSuccessStatusCode,
и выведите код и IsSuccessStatusCode
через пробел.