Чтение онлайн

на главную - закладки

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

Существует несколько способов возвращения содержимого в формате JSON из метода действия. Все приведенные далее примеры возвращают те же самые данные JSON с кодом состояния 200. Различия практически полностью стилистические. Добавьте в свой класс

ValuesController
следующий код:

[HttpGet]

public IActionResult Get

{

return Ok(new string[] { "value1", "value2" });

}

[HttpGet("one")]

public IEnumerable<string> Get1

{

return new string[] { "value1", "value2" };

}

[HttpGet("two")]

public ActionResult<IEnumerable<string>> Get2

{

return new string[] { "value1", "value2" };

}

[HttpGet("three")]

public string[] Get3

{

return new string[] { "value1", "value2" };

}

[HttpGet("four")]

public IActionResult Get4

{

return new JsonResult(new string[] { "value1", "value2" });

}

Чтобы

протестировать код, запустите приложение
AutoLot.Api
; вы увидите список всех методов из
ValuesController
в пользовательском интерфейсе (рис. 30.1).

Вспомните, что при определении маршрутов суффикс

Controller
отбрасывается из имен маршрутов, поэтому конечные точки в
ValuesController
сопоставляются с
Values
, а не с
ValuesController
.

Для выполнения одного из методов щелкните на кнопке GET, на кнопке Try it out (Опробовать) и на кнопке Execute (Выполнить). После выполнения метода пользовательский интерфейс обновится, чтобы отобразить результаты; наиболее важная часть пользовательского интерфейса Swagger показана на рис. 30.2.

Вы увидите, что выполнение каждого метода приводит к получению тех же самых результатов JSON.

Атрибут ApiController

Атрибут

ApiController
, появившийся в версии ASP.NET Core 2.1, в сочетании с классом
ControllerBase
обеспечивает правила, соглашения и линии поведения, специфичные для REST. Соглашения и линии поведения рассматриваются в последующих разделах.

Обязательность маршрутизации

с помощью атрибутов

При наличии атрибута

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

Автоматические ответы с кодом состояния 400

Если есть проблема с привязкой модели, то действие будет автоматически возвращать код состояния HTTP 400 (Bad Request), что заменяет следующий код:

if (!ModelState.IsValid)

{

return BadRequest(ModelState);

}

Для выполнения показанной выше проверки инфраструктура ASP.NET Core использует фильтр действий

ModelStatelnvalidFilter
. При наличии ошибок привязки или проверки достоверности ответ HTTP 400 в своем теле содержит детальные сведения об ошибках. Вот пример:

{

"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",

"title": "One or more validation errors occurred.",

"status": 400,

"traceId": "|7fb5e16a-4c8f23bbfc974667.",

"errors": {

"": [

"A non-empty request body is required."

]

}

}

Такое поведение можно отключить через конфигурацию в методе

ConfigureServices
класса
Startup
:

services.AddControllers

.ConfigureApiBehaviorOptions(options =>

{

options.SuppressModelStateInvalidFilter = true;

});

Выведение источников для привязки параметров

Механизм привязки моделей будет логически выводить источники извлечения значений на основе соглашений, описанных в табл. 30.1.

Такое поведение можно отключить через конфигурацию в методе

Configure Services
класса
Startup
:

services.AddControllers.ConfigureApiBehaviorOptions(options =>

{

// Подавить все выведение источников для привязки.

options.SuppressInferBindingSourcesForParameters= true;

Поделиться:
Популярные книги

Моя на одну ночь

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
5.50
рейтинг книги
Моя на одну ночь

Черный Маг Императора 8

Герда Александр
8. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 8

Измена. Отбор для предателя

Лаврова Алиса
1. Отбор для предателя
Фантастика:
фэнтези
5.00
рейтинг книги
Измена. Отбор для предателя

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга II

Шаг в бездну

Муравьёв Константин Николаевич
3. Перешагнуть пропасть
Фантастика:
фэнтези
космическая фантастика
7.89
рейтинг книги
Шаг в бездну

Часовая битва

Щерба Наталья Васильевна
6. Часодеи
Детские:
детская фантастика
9.38
рейтинг книги
Часовая битва

Вечная Война. Книга II

Винокуров Юрий
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
8.37
рейтинг книги
Вечная Война. Книга II

Хроники странного королевства. Вторжение. (Дилогия)

Панкеева Оксана Петровна
110. В одном томе
Фантастика:
фэнтези
9.38
рейтинг книги
Хроники странного королевства. Вторжение. (Дилогия)

Часовой ключ

Щерба Наталья Васильевна
1. Часодеи
Фантастика:
фэнтези
9.36
рейтинг книги
Часовой ключ

Инвестиго, из медика в маги

Рэд Илья
1. Инвестиго
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Инвестиго, из медика в маги

Кротовский, может, хватит?

Парсиев Дмитрий
3. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
аниме
7.50
рейтинг книги
Кротовский, может, хватит?

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Очешуеть! Я - жена дракона?!

Амеличева Елена
Фантастика:
юмористическая фантастика
5.43
рейтинг книги
Очешуеть! Я - жена дракона?!

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9