public class ValuesController : ControllerBase
{
}
На заметку!
В среде Visual Studio для контроллеров предусмотрены шаблоны. Чтобы получить к ним доступ, щелкните правой кнопкой мыши на имени каталогаControllers в проекте AutoLot.Api, выберите в контекстном меню пункт Add►Controller (Добавить►Контроллер) и укажите шаблон MVC Controller — Empty (Контроллер MVC — Пустой).В коде устанавливается маршрут для контроллера с использованием значения (api
[controller]). Такой шаблон маршрута будет соответствовать URL наподобие www.skimedic.com/api/values. Атрибут ApiController выбирает несколько специфичных для API средств (раскрываются в следующем разделе). Наконец, класс контроллера наследуется от ControllerBase. Как обсуждалось в главе 29, в инфраструктуре ASP.NET Core все типы контроллеров, доступные в классической версии ASP.NET, были объединены в один класс по имени Controller с базовым классом ControllerBase. Класс Controller обеспечивает функциональность, специфичную для представлений ("V" в MVC), тогда как ControllerBase предлагает оставшуюся базовую функциональность для приложений в стиле MVC.Существует несколько способов возвращения содержимого в формате JSON из метода действия. Все приведенные далее примеры возвращают те же самые данные JSON с кодом состояния 200. Различия практически полностью стилистические. Добавьте в свой класс ValuesController
[HttpGet]
public IActionResult Get()
{
return Ok(new string[] { "value1", "value2" });
}
[HttpGet("one")]
public IEnumerable
{
return new string[] { "value1", "value2" };
}
[HttpGet("two")]
public ActionResult
{
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
ControllerBase обеспечивает правила, соглашения и линии поведения, специфичные для REST. Соглашения и линии поведения рассматриваются в последующих разделах.Обязательность маршрутизации с помощью атрибутов
При наличии атрибута ApiController
Автоматические ответы с кодом состояния 400
Если есть проблема с привязкой модели, то действие будет автоматически возвращать код состояния HTTP 400 (Bad Request), что заменяет следующий код:
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
Для выполнения показанной выше проверки инфраструктура ASP.NET Core использует фильтр действий ModelStatelnvalidFilter
{
"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."