Читаем Язык программирования C#9 и платформа .NET5 полностью

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

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

<p id="AutBody_Root1411"><strong>Атрибут ApiController</strong></p>

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

<p id="AutBody_Root1412"><strong>Обязательность маршрутизации с помощью атрибутов</strong></p>

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

<p id="AutBody_Root1413"><strong>Автоматические ответы с кодом состояния 400</strong></p>

Если есть проблема с привязкой модели, то действие будет автоматически возвращать код состояния 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;

    });

<p id="AutBody_Root1414"><strong>Выведение источников для привязки параметров</strong></p>

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

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

services.AddControllers.ConfigureApiBehaviorOptions(options =>

{

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

  options.SuppressInferBindingSourcesForParameters= true;

  // Подавить выведение типа содержимого multipart/form-data.

  options. SuppressConsumesConstraintForFormFileParameters = true;

});

<p id="AutBody_Root1415"><strong>Детальные сведения о проблемах для кодов состояния ошибок</strong></p>

 ASP.NET Core трансформирует результат ошибки (состояние 400 или выше) в результат с помощью типа ProblemDetails, который показан ниже:

public class ProblemDetails

{

  public string Type { get; set; }

  public string Title { get; set; }

  public int? Status { get; set; }

  public string Detail { get; set; }

  public string Instance { get; set; }

  public IDictionary Extensions { get; }

    = new Dictionary(StringComparer.Ordinal);

}

Чтобы протестировать это поведение, добавьте в ValuesController еще один метод:

[HttpGet("error")]

public IActionResult Error

{

  return NotFound;

}

Запустите приложение и посредством пользовательского интерфейса Swagger выполните новую конечную точку error. Результатом по-прежнему будет код состояния 404 (Not Found), но в теле ответа возвратится дополнительная информация. Ниже приведен пример ответа (ваше значение traceId будет другим):

{

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

  "title": "Not Found",

  "status": 404,

  "traceId": "00-9a609e7e05f46d4d82d5f897b90da624-a6484fb34a7d3a44-00"

}

Перейти на страницу:

Похожие книги

97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT