Чтение онлайн

на главную

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

try

{

MainRepo.Delete(entity);

}

catch (Exception ex)

{

// Должно обрабатываться более элегантно.

return new BadRequestObjectResult(ex.GetBaseException?.Message);

}

return Ok;

}

Метод начинается с определения маршрута как запроса

HttpDelete
с обязательным параметром маршрута
id
. Значение
id
в маршруте сравнивается со значением
id
, отправленным с остальной частью сущности в теле запроса, и если они не совпадают, то возвращается код 400 (Bad Request). Если хранилище успешно удаляет запись, тогда клиенту возвращается код 200 (ОК), а если возникла какая-то ошибка, то клиент получает код 400 (Bad Request).

На этом создание базового контроллера завершено.

Класс CarsController

Приложению

AutoLot.Api
необходим дополнительный метод
HttpGet
для получения записей
Car
на основе значения
Make
. Он будет создан в новом классе по имени
CarsController
. Создайте в каталоге
Controllers
новый пустой контроллер API под названием
CarsController
. Модифицируйте операторы
using
следующим образом:

using System.Collections.Generic;

using AutoLot.Api.Controllers.Base;

using Microsoft.AspNetCore.Mvc;

using AutoLot.Models.Entities;

using AutoLot.Dal.Repos.Interfaces;

using AutoLot.Services.Logging;

using Microsoft.AspNetCore.Http;

using Swashbuckle.AspNetCore.Annotations;

Класс

CarsController
является производным от класса
BaseCrudController
и определяет маршрут на уровне контроллера. Конструктор принимает специфичное для сущности хранилище и средство ведения журнала. Вот первоначальный код контроллера:

namespace AutoLot.Api.Controllers

{

[Route("api/[controller]")]

public class CarsController : BaseCrudController<Car, CarsController>

{

public CarsController(ICarRepo carRepo, IAppLogging<CarsController> logger) :

base(carRepo, logger)

{

}

}

}

Класс

CarsController
расширяет базовый класс еще одним методом действия, который получает все записи об автомобилях конкретного производителя. Добавьте показанный ниже код:

/// <summary>

/// Gets all cars by make

/// </summary>

/// <returns>All cars for a make</returns>

/// <param name="id">Primary key of the make</param>

/// <response code="200">Returns all cars by make</response>

[Produces("application/json")]

[ProducesResponseType(StatusCodes.Status200OK)]

[ProducesResponseType(StatusCodes.Status204NoContent)]

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

[SwaggerResponse(204, "No content")]

[HttpGet("bymake/{id?}")]

public ActionResult<IEnumerable<Car>> GetCarsByMake(int? id)

{

if (id.HasValue && id.Value>0)

{

return Ok(((ICarRepo)MainRepo).GetAllBy(id.Value));

}

return Ok(MainRepo.GetAllIgnoreQueryFilters);

}

Атрибут

HttpGet
расширяет маршрут константой
bymake
и необязательным идентификатором производителя для фильтрации, например:

https://localhost:5021/api/cars/bymake/5

Сначала в методе проверяется, было ли передано значение для

id
. Если нет, то получаются все автомобили. Если значение было передано, тогда с использованием метода
GetAllBy
класса
CarRepo
получаются автомобили по производителю. Поскольку защищенное свойство
MainRepo
базового класса определено с типом
IRepo<T>
, его потребуется привести к типу
ICarRepo
.

Оставшиеся контроллеры

Все оставшиеся контроллеры, специфичные для сущностей, будут производными от класса

BaseCrudController
, но без добавления дополнительной функциональности. Добавьте в каталог
Controllers
еще четыре пустых контроллера API с именами
CreditRisksController
,
CustomersController
,
MakesController
и
OrdersController
.

Вот код оставшихся контроллеров:

// CreditRisksController.cs

using AutoLot.Api.Controllers.Base;

using AutoLot.Models.Entities;

using AutoLot.Dal.Repos.Interfaces;

using AutoLot.Services.Logging;

using Microsoft.AspNetCore.Mvc;

namespace AutoLot.Api.Controllers

{

[Route("api/[controller]")]

public class CreditRisksController

: BaseCrudController<CreditRisk, CreditRisksController>

Поделиться:
Популярные книги

Береги честь смолоду

Вяч Павел
1. Порог Хирург
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Береги честь смолоду

Убивать чтобы жить 2

Бор Жорж
2. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 2

Тринадцатый

NikL
1. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
6.80
рейтинг книги
Тринадцатый

Белые погоны

Лисина Александра
3. Гибрид
Фантастика:
фэнтези
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Белые погоны

Разведчик. Заброшенный в 43-й

Корчевский Юрий Григорьевич
Героическая фантастика
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.93
рейтинг книги
Разведчик. Заброшенный в 43-й

Последняя Арена 10

Греков Сергей
10. Последняя Арена
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Последняя Арена 10

Идеальный мир для Социопата 5

Сапфир Олег
5. Социопат
Фантастика:
боевая фантастика
рпг
5.50
рейтинг книги
Идеальный мир для Социопата 5

Энфис 2

Кронос Александр
2. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 2

Ты не мой Boy 2

Рам Янка
6. Самбисты
Любовные романы:
современные любовные романы
короткие любовные романы
5.00
рейтинг книги
Ты не мой Boy 2

Под маской моего мужа

Рам Янка
Любовные романы:
современные любовные романы
5.67
рейтинг книги
Под маской моего мужа

Лорд Системы 7

Токсик Саша
7. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 7

Жандарм 4

Семин Никита
4. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Жандарм 4

Релокант. Вестник

Ascold Flow
2. Релокант в другой мир
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Релокант. Вестник

Неудержимый. Книга VIII

Боярский Андрей
8. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
6.00
рейтинг книги
Неудержимый. Книга VIII