Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗csSpApErr 478 of 509 menu
◀ ▶

Ошибочный ответ API в C#

Число в StatusCode не всегда равно 200. Метод GetStringAsync при ошибке бросает исключение, поэтому для проверки кода удобнее GetAsync и явный разбор IsSuccessStatusCode.

Несуществующий ресурс на typicode часто даёт 404. Сначала проверяют код, и только при успехе передают тело в JsonDocument.Parse. Для демонстрации кода без разбора JSON подойдёт "httpbin.org/status/404":

using System.Net.Http; using HttpClient client = new(); using HttpResponseMessage response = await client.GetAsync("https://httpbin.org/status/404"); Console.WriteLine((int)response.StatusCode); Console.WriteLine(response.IsSuccessStatusCode);

Даже при коде 200 тело может быть не JSON, например страница с HTML. Локальная строка с синтаксической ошибкой вызывает JsonException при Parse. Исключение перехватывают, чтобы программа не падала. Печатают признак, что текст причины не пустой:

using System.Text.Json; try { JsonDocument.Parse("{bad"); } catch (JsonException ex) { Console.WriteLine(ex.Message.Length > 0); }

На typicode запрос "/users/99999" тоже обрабатывают через GetAsync. При неуспешном коде в консоль выводят сам код и не разбирают тело как объект пользователя:

using System.Net.Http; using HttpClient client = new(); using HttpResponseMessage response = await client.GetAsync("https://jsonplaceholder.typicode.com/users/99999"); if (!response.IsSuccessStatusCode) { Console.WriteLine((int)response.StatusCode); }

Дана строка "{sku:". Попытайтесь разобрать её. Если разбор не удался, выведите в консоль "parse error". Программа должна закончить работу штатно.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить