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

ЖАНРЫ

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

/// </summary>

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

/// <returns>Single record</returns>

/// <response code="200">Found the record</response>

/// <response code="204">No content</response>

[Produces("application/json")]

[ProducesResponseType(StatusCodes.Status200OK)]

[ProducesResponseType(StatusCodes.Status204NoContent)]

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

[SwaggerResponse(204, "No content")]

[HttpGet("{id}")]

public ActionResult<T> GetOne(int id)

{

var entity = MainRepo.Find(id);

if (entity == null)

{

return NotFound;

}

return Ok(entity);

}

Значение

маршрута автоматически присваивается параметру
id
(неявно из
[FromRoute]
).

Метод UpdateOne

Обновление записи делается с применением HTTP-метода

PUT
. Ниже приведен код метода
UpdateOne
:

/// <summary>

/// Updates a single record

/// </summary>

/// <remarks>

/// Sample body:

/// <pre>

/// {

/// "Id": 1,

/// "TimeStamp": "AAAAAAAAB+E="

/// "MakeId": 1,

/// "Color": "Black",

/// "PetName": "Zippy",

/// "MakeColor": "VW (Black)",

/// }

/// </pre>

/// </remarks>

/// <param name="id">Primary key of the record to update</param>

/// <returns>Single record</returns>

/// <response code="200">Found and updated the record</response>

/// <response code="400">Bad request</response>

[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
:

/// <summary>

/// Adds a single record

/// </summary>

/// <remarks>

/// Sample body:

/// <pre>

/// {

/// "Id": 1,

/// "TimeStamp": "AAAAAAAAB+E="

/// "MakeId": 1,

/// "Color": "Black",

/// "PetName": "Zippy",

/// "MakeColor": "VW (Black)",

/// }

/// </pre>

/// </remarks>

/// <returns>Added record</returns>

/// <response code="201">Found and updated the record</response>

/// <response code="400">Bad request</response>

[Produces("application/json")]

[ProducesResponseType(StatusCodes.Status201Created)]

[ProducesResponseType(StatusCodes.Status400BadRequest)]

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

[SwaggerResponse(400, "The request was invalid")]

[HttpPost]

public ActionResult<T> AddOne(T entity)

Поделиться с друзьями: