Что означает HTTP код ответа 200
Что проверяют
Знаете ли вы семантику успешных кодов и, главное, понимаете ли, что 200 говорит про транспорт, а не про бизнес-результат. Для позиции на C# смотрят ещё, как вы обрабатываете ответ в HttpClient и что возвращаете из контроллера.
Как отвечать
Код 200 OK означает, что сервер принял запрос, выполнил его и в теле лежит результат. Что именно лежит, зависит от метода: для GET это представление ресурса, для POST результат обработки.
Полезно назвать соседние успешные коды и показать, что выбор осознанный:
- 201 Created для созданного ресурса, вместе с заголовком
Location. В ASP.NET Core этоCreatedAtAction; - 202 Accepted, если работа принята, но ещё не выполнена;
- 204 No Content, когда тела нет вовсе, метод
NoContent, например после удаления.
На стороне клиента:
var response = await client.GetAsync(url);
if (response.IsSuccessStatusCode) { /* любой код 2xx */ }
response.EnsureSuccessStatusCode(); // иначе HttpRequestExceptionIsSuccessStatusCode истинно для всего диапазона от 200 до 299, поэтому сравнивать именно с HttpStatusCode.OK нужно только там, где важна точная семантика.
Где спотыкаются
Считают, что 200 означает успех операции. Сервис вполне может ответить 200 и положить в тело признак ошибки: так устроены многие внутренние API и запросы GraphQL. Проверять надо и код, и содержимое, иначе пользователь видит пустой экран вместо сообщения.
Второе: возвращают 200 на создание сущности. Формально не ошибка, но клиент теряет Location и возможность отличить создание от обновления, и на ревью это замечают.
Третье: забывают, что HttpClient не бросает исключение на 404 или 500. Метод GetAsync спокойно вернёт ответ с кодом ошибки, и разбор тела упадёт на HTML странице ошибки вместо ожидаемого JSON. Нужен либо EnsureSuccessStatusCode, либо явная ветка по коду ответа.