Язык программирования 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>
Поделиться:
Популярные книги
Черный Маг Императора 6
6. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
7.00
рейтинг книги
Оцифрованный. Том 1
1. Линкор Михаил
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XIV
14. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Штуцер и тесак
1. Штуцер и тесак
Фантастика:
боевая фантастика
альтернативная история
8.78
рейтинг книги
Я снова граф. Книга XI
11. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Болотник
1. Болотник
Фантастика:
попаданцы
альтернативная история
6.50
рейтинг книги
Кодекс Крови. Книга III
3. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Жестокая свадьба
Любовные романы:
современные любовные романы
4.87
рейтинг книги
Стеллар. Трибут
2. Стеллар
Фантастика:
боевая фантастика
рпг
8.75
рейтинг книги
Голодные игры
1. Голодные игры
Фантастика:
социально-философская фантастика
боевая фантастика
9.48
рейтинг книги
Последняя Арена 8
8. Последняя Арена
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Черный маг императора 2
2. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
6.00
рейтинг книги
Последний Паладин
1. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Измена. Свадьба дракона
Любовные романы:
любовно-фантастические романы
эро литература
5.00