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

Атрибут Produces задает тип содержимого для конечной точки. Атрибут ProducesResponseType использует перечисление StatusCodes для указания возможного кода возврата для конечной точки. Модифицируйте метод Get класса ValuesController, чтобы установить application/json в качестве возвращаемого типа и сообщить о том, что результатом действия будет либо 200 (ОК), либо 400 (Bad Request):

[HttpGet]

[Produces("application/json")]

[ProducesResponseType(StatusCodes.Status200OK)]

[ProducesResponseType(StatusCodes.Status400BadRequest)]

public ActionResult> Get

{

  return new string[] {"value1", "value2"};

}

Хотя атрибут ProducesResponseType добавляет в документацию коды ответов, настроить эту информацию невозможно. К счастью, Swashbuckle добавляет атрибут SwaggerResponse, предназначенный как раз для такой цели. Приведите код метода Get к следующему виду:

[HttpGet]

[Produces("application/json")]

[ProducesResponseType(StatusCodes.Status200OK)]

[ProducesResponseType(StatusCodes.Status400BadRequest)]

[SwaggerResponse(200, "The execution was successful")]

[SwaggerResponse(400, "The request was invalid")]

public ActionResult> Get

{

  return new string[] {"value1", "value2"};

}

Прежде чем аннотации Swagger будут приняты и добавлены в сгенерированную документацию, их потребуется включить. Откройте файл Startup.cs и перейдите к методу Configure. Обновите вызов AddSwaggerGen, как показано ниже:

services.AddSwaggerGen(c =>

{

  c.EnableAnnotations;

  ...

});

Теперь, просматривая раздел ответов в пользовательском интерфейсе Swagger, вы будете видеть настроенный обмен сообщениями (рис. 30.5).

На заметку! В Swashbuckle поддерживается большой объем дополнительной настройки, за сведениями о которой обращайтесь в документацию по ссылке https://github.com/domaindrivendev/Swashbuckle.AspNetCore.

<p id="AutBody_Root1421"><strong>Построение методов действий API</strong></p>

Большинство функциональных средств приложения 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 : ControllerBase

    where T : BaseEntity, new

    where TController : BaseCrudController

  {

  }

}

Класс является открытым и абстрактным, а также унаследованным от ControllerBase. Он принимает два обобщенных параметра типа. Первый тип ограничивается так, чтобы быть производным от BaseEntity и иметь стандартный конструктор, а второй — быть производным от BaseCrudController (для представления производных контроллеров). Когда к базовому классу добавляется атрибут ApiController, производные контроллеры получают функциональность, обеспечиваемую атрибутом.

На заметку! Для этого класса не определен маршрут. Он будет установлен с использованием производных классов.

<p id="AutBody_Root1422"><strong>Конструктор</strong></p>

На следующем шаге добавляются две защищенные переменные уровня класса: одна для хранения реализации интерфейса IRepo и еще одна для хранения реализации интерфейса IAppLogging. Обе они должны устанавливаться с применением конструктора.

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

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

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

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

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

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