public ActionResult
{
var entity = MainRepo.Find(id);
if (entity == null)
{
return NotFound();
}
return Ok(entity);
}
Значение маршрута автоматически присваивается параметру id
(неявно из [FromRoute]
).
Метод UpdateOne()
Обновление записи делается с применением HTTP-метода PUT
. Ниже приведен код метода UpdateOne()
:
///
/// Updates a single record
///
///
/// Sample body:
///
/// {
/// "Id": 1,
/// "TimeStamp": "AAAAAAAAB+E="
/// "MakeId": 1,
/// "Color": "Black",
/// "PetName": "Zippy",
/// "MakeColor": "VW (Black)",
/// }
///
///
/// Primary key of the record to update
///
///
///
[Produces("application/json")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[SwaggerResponse(200, "The execution was successful")]
[SwaggerResponse(400, "The request was invalid")]
[HttpPut("{id}")]
public IActionResult UpdateOne(int id,T entity)
{
if (id != entity.Id)
{
return BadRequest();
}
try
{
MainRepo.Update(entity);
}
catch (CustomException ex)
{
// Пример специального исключения.
// Должно обрабатываться более элегантно.
return BadRequest(ex);
}
catch (Exception ex)
{
// Должно обрабатываться более элегантно.
return BadRequest(ex);
}
return Ok(entity);
}
Метод начинается с установки маршрута как запроса HttpPut
на основе маршрута производного контроллера с обязательным параметром маршрута id
. Значение маршрута присваивается параметру id
(неявно из [FromRoute]
), а сущность (entity
) извлекается из тела запроса (неявно из [FromBody]
).Также обратите внимание, что проверка достоверности модели отсутствует, поскольку делается автоматически атрибутом ApiController
. Если состояние модели укажет на наличие ошибок, тогда клиенту будет возвращен код 400 (Bad Request).
Метод проверяет, совпадает ли значение маршрута (id
) со значением id
в теле запроса. Если не совпадает, то возвращается код 400 (Bad Request). Если совпадает, тогда используется хранилище для обновления записи. Если обновление терпит неудачу с генерацией исключения, то клиенту возвращается код 400 (Bad Request). Если операция обновления проходит успешно, тогда клиенту возвращается код 200 (ОК) и обновленная запись в качестве тела запроса.
На заметку! Обработка исключений в этом примере (а также в остальных примерах) абсолютно неадекватна. В производственных приложениях вы должны задействовать все знания, полученные к настоящему времени, чтобы элегантно обрабатывать возникающие проблемы в соответствии с имеющимися требованиями.
Метод AddOne()
Вставка записи делается с применением HTTP-метода POST
. Ниже приведен код метода AddOne()
:
///
/// Adds a single record
///
///
/// Sample body:
///
/// {
/// "Id": 1,
/// "TimeStamp": "AAAAAAAAB+E="
/// "MakeId": 1,
/// "Color": "Black",
/// "PetName": "Zippy",
/// "MakeColor": "VW (Black)",
/// }
///
///
///
///
///
[Produces("application/json")]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[SwaggerResponse(201, "The execution was successful")]
[SwaggerResponse(400, "The request was invalid")]
[HttpPost]
public ActionResult
{
try
{
MainRepo.Add(entity);
}
catch (Exception ex)
{
return BadRequest(ex);
}