Приложению 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
{
public CarsController(ICarRepo carRepo, IAppLogging
base(carRepo, logger)
{
}
}
}
Класс CarsController
расширяет базовый класс еще одним методом действия, который получает все записи об автомобилях конкретного производителя. Добавьте показанный ниже код:
///
/// Gets all cars by make
///
///
/// Primary key of the make
///
[Produces("application/json")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[SwaggerResponse(200, "The execution was successful")]
[SwaggerResponse(204, "No content")]
[HttpGet("bymake/{id?}")]
public ActionResult
{
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
, его потребуется привести к типу 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
{
public CreditRisksController(
ICreditRiskRepo creditRiskRepo, IAppLogging
: base(creditRiskRepo, logger)
{
}
}
}
// CustomersController.cs
using AutoLot.Api.Controllers.Base;
using AutoLot.Models.Entities;
using AutoLot.Dal.Repos.Interfaces;
Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT