Существует несколько способов возвращения содержимого в формате 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 в своем теле содержит детальные сведения об ошибках. Вот пример: