Теперь, просматривая раздел ответов в пользовательском интерфейсе Swagger, вы будете видеть настроенный обмен сообщениями (рис. 30.5).
На заметку! В Swashbuckle поддерживается большой объем дополнительной настройки, за сведениями о которой обращайтесь в документацию по ссылке https://github.com/domaindrivendev/Swashbuckle.AspNetCore
.
Построение методов действий API
Большинство функциональных средств приложения AutoLot.Api
можно отнести к одному из перечисленных далее методов:
• GetOne()
• GetAll()
• UpdateOne()
• AddOnе()
• DeleteOne()
Основные методы API будут реализованы в обобщенном базовом контроллере API. Начните с создания нового каталога под названием Base
в каталоге Controllers
проекта AutoLot.Api
. Добавьте в этот каталог новый файл класса по имени BaseCrudController.cs
. Модифицируйте операторы using
и определение класса, как демонстрируется ниже:
using 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
where T : BaseEntity, new()
where TController : BaseCrudController
{
}
}
Класс является открытым и абстрактным, а также унаследованным от ControllerBase
. Он принимает два обобщенных параметра типа. Первый тип ограничивается так, чтобы быть производным от BaseEntity
и иметь стандартный конструктор, а второй — быть производным от BaseCrudController
(для представления производных контроллеров). Когда к базовому классу добавляется атрибут ApiController
, производные контроллеры получают функциональность, обеспечиваемую атрибутом.
На заметку! Для этого класса не определен маршрут. Он будет установлен с использованием производных классов.
Конструктор
На следующем шаге добавляются две защищенные переменные уровня класса: одна для хранения реализации интерфейса IRepo
и еще одна для хранения реализации интерфейса IAppLogging
. Обе они должны устанавливаться с применением конструктора.
protected readonly IRepo
protected readonly IAppLogging
protected BaseCrudController(IRepo
{
MainRepo = repo;
Logger = logger;
}
Методы GetXXX()
Есть два HTTP-метода GET
, GetOne()
и GetAll()
. Оба они используют хранилище, переданное контроллеру. Первым делом добавьте метод Getll()
, который служит в качестве конечной точки для шаблона маршрута контроллера:
///
/// Gets all records
///
///
///
[Produces("application/json")]
[ProducesResponseType(StatusCodes.Status200OK)]
[SwaggerResponse(200, "The execution was successful")]
[SwaggerResponse(400, "The request was invalid")]
[HttpGet]
public ActionResult
{
return Ok(MainRepo.GetAllIgnoreQueryFilters());
}
Следующий метод получает одиночную запись на основе параметра id
, который передается как обязательный параметр маршрута и добавляется к маршруту производного контроллера:
///
/// Gets a single record
///
/// Primary key of the record
///
///
///
[Produces("application/json")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[SwaggerResponse(200, "The execution was successful")]
[SwaggerResponse(204, "No content")]
[HttpGet("{id}")]