Kniga-Online.club
» » » » Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Читать бесплатно Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен. Жанр: Программирование год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:
class="code">protected readonly IRepo<T> MainRepo;

protected readonly IAppLogging<TController> Logger;

protected BaseCrudController(IRepo<T> repo, IAppLogging<TController> logger)

{

  MainRepo = repo;

  Logger = logger;

}

Методы GetXXX()

Есть два HTTP-метода GET, GetOne() и GetAll(). Оба они используют хранилище, переданное контроллеру. Первым делом добавьте метод Getll(), который служит в качестве конечной точки для шаблона маршрута контроллера:

/// <summary>

/// Gets all records

/// </summary>

/// <returns>All records</returns>

/// <response code="200">Returns all items</response>

[Produces("application/json")]

[ProducesResponseType(StatusCodes.Status200OK)]

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

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

[HttpGet]

public ActionResult<IEnumerable<T>> GetAll()

{

  return Ok(MainRepo.GetAllIgnoreQueryFilters());

}

Следующий метод получает одиночную запись на основе параметра id, который передается как обязательный параметр маршрута и добавляется к маршруту производного контроллера:

/// <summary>

/// Gets a single record

/// </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)

{

  try

  {

    MainRepo.Add(entity);

  }

  catch (Exception ex)

  {

    return BadRequest(ex);

  }

  return CreatedAtAction(nameof(GetOne), new {id = entity.Id}, entity);

}

Метод начинается с определения маршрута как запроса HttpPost. Параметр маршрута отсутствует, потому что создается новая запись. Если хранилище успешно добавит запись, то ответом будет результат вызова метода CreatedAtAction(), который возвращает клиенту код 201 вместе с URL для вновь созданной сущности в виде значения заголовка Location. Вновь созданная сущность в формате JSON помещается внутрь тела ответа.

Метод DeleteOne()

Удаление записи делается с применением HTTP-метода DELETE. Ниже приведен код метода DeleteOne():

/// <summary>

/// Deletes a single record

/// </summary>

/// <remarks>

/// Sample body:

/// <pre>

/// {

///   "Id": 1,

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

/// }

/// </pre>

/// </remarks>

/// <returns>Nothing</returns>

/// <response code="200">Found and deleted 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")]

[HttpDelete("{id}")]

public ActionResult<T> DeleteOne(int id, T entity)

{

  if (id != entity.Id)

  {

    return BadRequest();

  }

  try

  {

    MainRepo.Delete(entity);

  }

  catch (Exception ex)

Перейти на страницу:

Эндрю Троелсен читать все книги автора по порядку

Эндрю Троелсен - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


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

Отзывы читателей о книге Язык программирования C#9 и платформа .NET5, автор: Эндрю Троелсен. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*