Категории
Самые читаемые
ChitatKnigi.com » 🟢Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

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

Читать онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
1 ... 598 599 600 601 602 603 604 605 606 ... 642
Перейти на страницу:

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать

using Swashbuckle.AspNetCore.Annotations;

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

[HttpGet]

<b>[Produces(&quot;application/json&quot;)]</b>

<b>[ProducesResponseType(StatusCodes.Status200OK)]</b>

<b>[ProducesResponseType(StatusCodes.Status400BadRequest)]</b>

public ActionResult&lt;IEnumerable&lt;string&gt;&gt; Get()

{

  return new string[] {&quot;value1&quot;, &quot;value2&quot;};

}

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

[HttpGet]

[Produces(&quot;application/json&quot;)]

[ProducesResponseType(StatusCodes.Status200OK)]

[ProducesResponseType(StatusCodes.Status400BadRequest)]

<b>[SwaggerResponse(200, &quot;The execution was successful&quot;)]</b>

<b>[SwaggerResponse(400, &quot;The request was invalid&quot;)]</b>

public ActionResult&lt;IEnumerable&lt;string&gt;&gt; Get()

{

  return new string[] {&quot;value1&quot;, &quot;value2&quot;};

}

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

services.AddSwaggerGen(c =&gt;

{

<b>  c.EnableAnnotations();</b>

  ...

});

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

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

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

Построение методов действий 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&lt;T, TController&gt; : ControllerBase

    where T : BaseEntity, new()

    where TController : BaseCrudController&lt;T, TController&gt;

  {

  }

}

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

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

Конструктор

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

1 ... 598 599 600 601 602 603 604 605 606 ... 642
Перейти на страницу:
Отывы о книге
Открыть боковую панель
Комментарии
Jonna
Jonna 02.01.2025 - 01:03
Страстно🔥 очень страстно
Ксения
Ксения 20.12.2024 - 00:16
Через чур правильный герой. Поэтому и остался один
Настя
Настя 08.12.2024 - 03:18
Прочла с удовольствием. Необычный сюжет с замечательной концовкой
Марина
Марина 08.12.2024 - 02:13
Не могу понять, где продолжение... Очень интересная история, хочется прочесть далее
Мприна
Мприна 08.12.2024 - 01:05
Эх, а где же продолжение?