Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
using Swashbuckle.AspNetCore.Annotations;
Атрибут
Produces
ProducesResponseType
StatusCodes
Get()
ValuesController
application/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"};
}
Хотя атрибут
ProducesResponseType
SwaggerResponse
Get()
[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.cs
Configure()
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. Начните с создания нового каталога под названием
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<T, TController> : ControllerBase
where T : BaseEntity, new()
where TController : BaseCrudController<T, TController>
{
}
}
Класс является открытым и абстрактным, а также унаследованным от
ControllerBase
BaseEntity
BaseCrudController
ApiController
На заметку! Для этого класса не определен маршрут. Он будет установлен с использованием производных классов.
Конструктор
На следующем шаге добавляются две защищенные переменные уровня класса: одна для хранения реализации интерфейса
IRepo<T>
IAppLogging<T>