Статические классы Results и TypedResults в ASP.NET Core. Отправка кодов состояния HTTP 2xx

Отправка кодов состояния HTTP 2xx свидетельствует о том, что запрос пользователя успешно обработан. При этом, сервер, использовать различные коды из группы 2хх, чтобы сообщить, что запрос успешный или запрос был принят к исполнению и т.д. В статических классах Results и TypedResults для отправки кодов статуса 2хх могут использоваться семь различных методов, которые мы сегодня и рассмотрим.

Методы Accepted() и AcceptedAtRoute() класса Results

Эти методы отправляют клиенту код состояния 202, который говорит о том, что запрос пользователя принят в обработку и не обязательно дожидаться её завершения.

Метод Описание параметров
public static IResult Accepted (string? uri = default, object? value = default);

 

  • uri — адрес по которому можно отслеживать обработку запроса
  • value — объект, который может использоваться для формирования ответа
public static IResult Accepted<TValue> (string? uri = default, TValue? value = default);

 

  • uri — адрес по которому можно отслеживать обработку запроса
  • value — объект, который может использоваться для формирования ответа
public static IResult AcceptedAtRoute (string? routeName = default, object? routeValues = default, object? value = default);

 

  • routeName — имя маршрута
  • routeValues — значения для параметров маршрута
  • value — объект, который может использоваться для формирования ответа
public static IResult AcceptedAtRoute<TValue> (string? routeName = default, object? routeValues = default, TValue? value = default);

 

  • routeName — имя маршрута
  • routeValues — значения для параметров маршрута
  • value — объект, который может использоваться для формирования ответа

Пример использования метода Accepted с двумя параметрами:

app.MapGet("/create", () => Results.Accepted("/control", new { Name = "new element", Id = 4 }));

В результате получим следующий ответ сервера:

Что касается использования метода AcceptedAtRoute(), то метод действует аналогичным образом, но требует указания не пути, а имени конечной точки (про именованные endpoint см. информацию здесь):

app.MapGet("/create", () => Results.AcceptedAtRoute("contol_root", //имя маршрута
                                                    new { id=1 }, //объект, содержащий параметры маршрута
                                                    new { Name = "new element", Id = 4 } //объект для формирования ответа
                                                    ));

app.MapGet("/control/{id}", (string id) => $"{id} created").WithName("contol_root"); //именованный маршрут для отслеживания состояния запроса

В результате получим следующий ответ сервера

В отличие от метода Accepted, AcceptedToRoute требует, чтобы маршрут, имя которого задается в первом параметре существовал, если этот параметр используется.

Методы Created() и CreatedAtRoute() класса Results

Эти методы отправляют клиенту код статуса 201 Created, означающий, что в результате успешного выполнения запроса был создан новый ресурс.

Метод Описание параметров
public static IResult Created (string uri, object? value);
  • uri — адрес по которому был создан новый ресурс
  • value — объект, который может использоваться для формирования ответа
public static IResult Created (Uri uri, object? value);
  • uri — адрес по которому был создан новый ресурс
  • value — объект, который может использоваться для формирования ответа
public static IResult Created<TValue> (string uri, TValue? value);
  • uri — адрес по которому был создан новый ресурс
  • value — объект, который может использоваться для формирования ответа
public static IResult Created<TValue> (Uri uri, TValue? value);
  • uri — адрес по которому был создан новый ресурс
  • value — объект, который может использоваться для формирования ответа
public static IResult CreatedAtRoute (string? routeName = default, object? routeValues = default, object? value = default);
  • routeName — имя маршрута
  • routeValues — значения для параметров маршрута
  • value — объект, который может использоваться для формирования ответа
public static IResult CreatedAtRoute<TValue> (string? routeName = default, object? routeValues = default, TValue? value = default);
  • routeName — имя маршрута
  • routeValues — значения для параметров маршрута
  • value — объект, который может использоваться для формирования ответа

 

Пример использования метода Created:

app.MapGet("/create", () => Results.Created("/created", new { Name = "new element", Id = 3 }));

результат выполнения:

Аналогичный пример с использованием метода CreatedAtRoute:

app.MapGet("/create", () => Results.CreatedAtRoute("contol_root", //имя маршрута
                                                    new { id=1 }, //объект, содержащий параметры маршрута
                                                    new { Name = "new element", Id = 4 } //объект для формирования ответа
                                                    ));

app.MapGet("/control/{id}", (string id) => $"{id} created").WithName("contol_root"); //именованный маршрут для отслеживания состояния запроса

Результат

Метод NoContent() класса Results

Этот метод возвращает код статуса 204, который означает, что сервер успешно обработал запрос, но в ответе были переданы только заголовки без тела сообщения

Метод Описание параметров
public static IResult NoContent ();

Этот метод не принимает никаких параметров

app.MapGet("/nocontent", () => Results.NoContent());

результат

Метод Ok() класса Results

Метод отправляет пользователю код статуса 200 OK, означающий, что запрос прошел успешно

Метод Описание параметров
public static IResult Ok (object? value = default);
  • value — объект на основании которого будет формироваться ответ клиенту
public static IResult Ok<TValue> (TValue? value);
  • value — объект на основании которого будет формироваться ответ клиенту

 

Пример использования метода Ok:

app.MapGet("/ok", () => Results.Ok());

здесь мы не используем параметр value, поэтому сервер просто вернет код статуса 200 без какого-либо тела запроса:

Метод StatusCode() класса Results

Этот метод можно назвать универсальным, так как всё, что он делает — этот отправляет заданный пользователем код статуса:

Метод Описание параметров
public static IResult StatusCode (int statusCode);
  • statusCode — код статуса, который необходимо отправить пользователю в ответе

Пример

app.MapGet("/code", () => Results.StatusCode(500));

Результат

Методы Accepted(), AcceptedAtRoute(), Created(), CreatedAtRoute(), NoContent(), Ok() и StatusCode() класса TypedResults

Методы Accepted(), AcceptedAtRoute(), Created(), CreatedAtRoute(), NoContent(), Ok() и StatusCode() в классе TypedResults выполняют те же самые операции, что и в классе Results и, при этом, возвращают следующие типизированные результаты:

Метод Тип возвращаемого объекта
Accepted() Accepted
AcceptedAtRoute() AcceptedAtRoute
Created() Created
CreatedAtRoute() CreatedAtRoute
NoContent() NoContent
Ok() Ok
StatusCode() StatusCodeHttpResult

 

Итого

Статические классы Results и TypedResults предоставляют сразу ряд методов, отправляющих коды состояния HTTP группы 2хх, означающих, что запрос выполнен успешно или запрос был принят к исполнению. Часть этих методов принимают в качестве параметра объект, который сериализуется в JSON и передается в теле ответа клиенту.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии