Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
using Swashbuckle.AspNetCore.Annotations;Атрибут
ProducesProducesResponseTypeStatusCodesGet()ValuesControllerapplication/json[HttpGet]<b>[Produces("application/json")]</b><b>[ProducesResponseType(StatusCodes.Status200OK)]</b><b>[ProducesResponseType(StatusCodes.Status400BadRequest)]</b>public ActionResult<IEnumerable<string>> Get(){  return new string[] {"value1", "value2"};}Хотя атрибут
ProducesResponseTypeSwaggerResponseGet()[HttpGet][Produces("application/json")][ProducesResponseType(StatusCodes.Status200OK)][ProducesResponseType(StatusCodes.Status400BadRequest)]<b>[SwaggerResponse(200, "The execution was successful")]</b><b>[SwaggerResponse(400, "The request was invalid")]</b>public ActionResult<IEnumerable<string>> Get(){  return new string[] {"value1", "value2"};}Прежде чем аннотации Swagger будут приняты и добавлены в сгенерированную документацию, их потребуется включить. Откройте файл
Startup.csConfigure()AddSwaggerGen()services.AddSwaggerGen(c =>{<b>  c.EnableAnnotations();</b>  ...});Теперь, просматривая раздел ответов в пользовательском интерфейсе Swagger, вы будете видеть настроенный обмен сообщениями (рис. 30.5).

На заметку! В Swashbuckle поддерживается большой объем дополнительной настройки, за сведениями о которой обращайтесь в документацию по ссылке
https://github.com/domaindrivendev/Swashbuckle.AspNetCoreПостроение методов действий API
Большинство функциональных средств приложения
AutoLot.Api•
GetOne()•
GetAll()•
UpdateOne()•
AddOnе()•
DeleteOne()Основные методы API будут реализованы в обобщенном базовом контроллере API. Начните с создания нового каталога под названием
BaseControllersAutoLot.ApiBaseCrudController.csusingusing System;using System.Collections.Generic;using AutoLot.Dal.Exceptions;using AutoLot.Models.Entities.Base;using AutoLot.Dal.Repos.Base;using AutoLot.Services.Logging;using Microsoft.AspNetCore.Http;using Microsoft.AspNetCore.Mvc;using Swashbuckle.AspNetCore.Annotations;namespace AutoLot.Api.Controllers.Base{  [ApiController]  public abstract class BaseCrudController<T, TController> : ControllerBase    where T : BaseEntity, new()    where TController : BaseCrudController<T, TController>  {  }}Класс является открытым и абстрактным, а также унаследованным от
ControllerBaseBaseEntityBaseCrudControllerApiControllerНа заметку! Для этого класса не определен маршрут. Он будет установлен с использованием производных классов.
Конструктор
На следующем шаге добавляются две защищенные переменные уровня класса: одна для хранения реализации интерфейса
IRepo<T>IAppLogging<T>