Ошибочный ответ 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". Программа
должна закончить работу штатно.