Содержание
Отправка кодов состояния HTTP 2xx свидетельствует о том, что запрос пользователя успешно обработан. При этом, сервер, использовать различные коды из группы 2хх, чтобы сообщить, что запрос успешный или запрос был принят к исполнению и т.д.
Классы AcceptedResult, AcceptedAtActionResult, AcceptedAtRouteResult
Классы AcceptedResult
, AcceptedAtActionResult
, AcceptedAtRouteResult
отправляют клинту код статуса 202
, который говорит о том, что запрос пользователя принят в обработку и не обязательно дожидаться её завершения. В классе Controller
для формирования объектов этих типов используется порядка три метода — Accepted()
, AcceptedAtAction()
, AcceptedAtRoute()
, каждый из которых имеет до шести различных перегрузок.
При этом, смысл всех этих методов сводится к следующему — отправить пользователю статусный код 202, URL по которому можно отслеживать состояние запроса и, если необходимо, како-либо объект в теле ответа.
Создадим следующее действие контроллера HomeController
в приложении ASP.NET Core MVC:
public IActionResult LongOperation() { return Accepted("/result", new{name = "Sam", Age=35 }); }
здесь мы отправляем пользователю статусный код, в теле ответа — объект, а в заголовке Location
— путь по которому пользователь может отслеживать выполнение запроса.
Вот как будет выглядеть ответ в браузере
Классы CreatedResult, CreatedAtActionResult, CreatedAtRouteResult
Эти классы отправляют клиенту код статуса 201 Created
, означающий, что в результате успешного выполнения запроса был создан новый ресурс. Как и в случае с методами AcceptedXXX()
, эти методы могут отправлять клиенту вместе со статусным кодом информацию об URL по которому создана новая сущность и содержимое в теле ответа. Например, добавим в контроллер следующее действие:
public IActionResult CreateOperation() { return Created("/blog", new { name = "Sam", Age = 35 }); }
Результат выполнения действия будет следующий
Класс NoContentResult
Этот класс возвращает код статуса 204, который означает, что сервер успешно обработал запрос, но в ответе были переданы только заголовки без тела сообщения и может быть создан методом NoContent()
класса Controller
:
public virtual NoContentResult NoContent();
Этот метод не принимает никаких параметров и всё, что делает — отправляет статусный код 204, например выполнение этого действия контроллера
public IActionResult NoContentOperation() { return NoContent(); }
приведет к тому, что клиенту придут в заголовках код 204.
Классы OkResult и OkObjectResult
Эти классы отправляют пользователю код статуса 200 OK, означающий, что запрос прошел успешно, при этом, OkObjectResult
используется в том случае, если в теле запроса содержится какой-либо контент. Для создания этих классов используется метод класса Controller
:
public virtual OkResult Ok(); public virtual OkObjectResult Ok(object? value);
Например, посмотрим на результат следующего действия контроллера:
public IActionResult OkOperation() { return Ok(new { name = "Sam", Age = 35 }); }
Итого
Для отправки кодом статуса HTTP из группы 2хх в ASP.NET Core MVC предусмотрен ряд классов и методов класса Controller
, позволяющих отправлять клиенту такие коды как 200, 201, 202 и 204. В зависимости от наших потребностей мы можем использовать различные перегрузки методов класса Controller
для формирования наиболее информативного ответа клиенту, например, включать в тело ответа объекты, которые будут представлены в браузере в формате JSON.