Содержание
- Методы Accepted() и AcceptedAtRoute() класса Results
- Методы Created() и CreatedAtRoute() класса Results
- Метод NoContent() класса Results
- Метод Ok() класса Results
- Метод StatusCode() класса Results
- Методы Accepted(), AcceptedAtRoute(), Created(), CreatedAtRoute(), NoContent(), Ok() и StatusCode() класса TypedResults
- Итого
Отправка кодов состояния HTTP 2xx свидетельствует о том, что запрос пользователя успешно обработан. При этом, сервер, использовать различные коды из группы 2хх, чтобы сообщить, что запрос успешный или запрос был принят к исполнению и т.д. В статических классах Results
и TypedResults
для отправки кодов статуса 2хх могут использоваться семь различных методов, которые мы сегодня и рассмотрим.
Методы Accepted() и AcceptedAtRoute() класса Results
Эти методы отправляют клиенту код состояния 202, который говорит о том, что запрос пользователя принят в обработку и не обязательно дожидаться её завершения.
Метод | Описание параметров |
public static IResult Accepted (string? uri = default, object? value = default);
|
|
public static IResult Accepted<TValue> (string? uri = default, TValue? value = default);
|
|
public static IResult AcceptedAtRoute (string? routeName = default, object? routeValues = default, object? value = default);
|
|
public static IResult AcceptedAtRoute<TValue> (string? routeName = default, object? routeValues = default, TValue? value = default);
|
|
Пример использования метода 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); |
|
public static IResult Created (Uri uri, object? value); |
|
public static IResult Created<TValue> (string uri, TValue? value); |
|
public static IResult Created<TValue> (Uri uri, TValue? value); |
|
public static IResult CreatedAtRoute (string? routeName = default, object? routeValues = default, object? value = default); |
|
public static IResult CreatedAtRoute<TValue> (string? routeName = default, object? routeValues = default, TValue? value = default); |
|
Пример использования метода 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); |
|
public static IResult Ok<TValue> (TValue? value); |
|
Пример использования метода Ok
:
app.MapGet("/ok", () => Results.Ok());
здесь мы не используем параметр value
, поэтому сервер просто вернет код статуса 200 без какого-либо тела запроса:
Метод StatusCode() класса Results
Этот метод можно назвать универсальным, так как всё, что он делает — этот отправляет заданный пользователем код статуса:
Метод | Описание параметров |
public static IResult StatusCode (int 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 и передается в теле ответа клиенту.