return CreatedAtAction(nameof(GetOne), new {id = entity.Id}, entity);
}
Метод начинается с определения маршрута как запроса HttpPost
. Параметр маршрута отсутствует, потому что создается новая запись. Если хранилище успешно добавит запись, то ответом будет результат вызова метода CreatedAtAction()
, который возвращает клиенту код 201 вместе с URL для вновь созданной сущности в виде значения заголовка Location
. Вновь созданная сущность в формате JSON помещается внутрь тела ответа.
Удаление записи делается с применением HTTP-метода DELETE
. Ниже приведен код метода DeleteOne()
:
///
/// Deletes a single record
///
///
/// Sample body:
///
/// {
/// "Id": 1,
/// "TimeStamp": "AAAAAAAAB+E="
/// }
///
///
///
///
///
[Produces("application/json")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[SwaggerResponse(200, "The execution was successful")]
[SwaggerResponse(400, "The request was invalid")]
[HttpDelete("{id}")]
public ActionResult
{
if (id != entity.Id)
{
return BadRequest();
}
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).
На этом создание базового контроллера завершено.
Приложению 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")]