Este artigo é parte da série:

E para completar nosso exercício, vamos inserir os verbos ou métodos HTTP Put e Patch.
Esse artigo é uma continuação direta deste aqui:

Vou inserir o código logo após o fim do método “AdicionaUF”.
[HttpPut(Name = "Altera")] [ProducesResponseType(StatusCodes.Status200OK)] public ActionResult<IEnumerable<UF>> AtualizaUF(int IdUF, string NomeUF, string CapitalUF) { if (IdUF == 0) { return BadRequest(); } UF result = UFs.Find(x => x.Id == IdUF); if (result == null) { return NotFound(); } result.Nome = NomeUF; result.Capital = CapitalUF; return Ok(result); } [HttpPatch(Name = "MudaCapital")] [ProducesResponseType(StatusCodes.Status200OK)] public ActionResult<IEnumerable<UF>> MudaCapital(string NomeUF, string NovaCapital) { if (NomeUF == "") { return BadRequest(); } UF result = UFs.Find(x => x.Nome == NomeUF); if (result == null) { return NotFound(); } result.Capital = NovaCapital; return Ok(result); }
Agora, ao executar ao Swagger, temos todos os métodos HTTP expostos para a nossa classe “ListaUF”.

Agora, para colocar ordem em nosso exercício, vamos separar os códigos que fizemos até agora. No Solution Explorer, clique-direito sobre o nome do Controller “T01Controller.cs” e renomeie para um nome mais amigável. No exemplo, eu chamei de “BasicoAPIController.cs”

Observe que o nome do arquivo que abriga as classes não muda em nada o funcionamento do programa.
Crie um novo controller para abrigar a classe “Operacoes”, que foi a primeira que fizemos. Nesse caso, eu chamei de “OperacoesController.cs”. Ao criar o novo controller, atente-se que o tipo deve ser API Controller e não MVC Controller, conforme vem no padrão.




Agora recorte todo o método “SomaController” que está na “BasicoAPIController” e cole na “OperacoesController”. No final das contas, vai ficar assim:
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace Treino_REST_02.Controllers { [Route("api/Operacao")] [ApiController] public class SomaController : ControllerBase { [HttpPost(Name = "Soma")] [ProducesResponseType(StatusCodes.Status200OK)] public ActionResult<int> Soma(int A, int B) { return Ok(A + B); } } }
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System; using System.Net; using System.Runtime.ConstrainedExecution; using System.Runtime.InteropServices; using System.Text.Json; using Treino_REST_02.Models; namespace Treino_REST_02.Controllers { [Route("api/ListaUF")] [ApiController] public class ListaUFController : ControllerBase { static List<UF> UFs = new List<UF>(); public ListaUFController() { if (UFs.Count == 0) { UFs.Add(new UF { Id = 1, Nome = "RJ", Capital = "Rio de Janeiro" }); UFs.Add(new UF { Id = 2, Nome = "SP", Capital = "São Paulo" }); UFs.Add(new UF { Id = 3, Nome = "BA", Capital = "Salvador" }); } } [HttpGet(Name = "Listagem")] [ProducesResponseType(StatusCodes.Status200OK)] public ActionResult<IEnumerable<UF>> ListaUF() { return Ok(UFs); } [HttpGet("{IdUF:int}", Name = "MostraUF")] [ProducesResponseType(200)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public ActionResult<UF> MostraUF(int IdUF) { if (IdUF == 0) { return BadRequest(); } UF result = UFs.Find(x => x.Id == IdUF); if (result == null) { return NotFound(); } return Ok(result); } [HttpPost(Name ="Adiciona")] [ProducesResponseType(StatusCodes.Status200OK)] public ActionResult<IEnumerable<UF>> AdicionaUF(UF NovaUF) { UFs.Add(NovaUF); return Ok(UFs); } [HttpPut(Name = "Altera")] [ProducesResponseType(StatusCodes.Status200OK)] public ActionResult<IEnumerable<UF>> AtualizaUF(int IdUF, string NomeUF, string CapitalUF) { if (IdUF == 0) { return BadRequest(); } UF result = UFs.Find(x => x.Id == IdUF); if (result == null) { return NotFound(); } result.Nome = NomeUF; result.Capital = CapitalUF; return Ok(result); } [HttpPatch(Name = "MudaCapital")] [ProducesResponseType(StatusCodes.Status200OK)] public ActionResult<IEnumerable<UF>> MudaCapital(string NomeUF, string NovaCapital) { if (NomeUF == "") { return BadRequest(); } UF result = UFs.Find(x => x.Nome == NomeUF); if (result == null) { return NotFound(); } result.Capital = NovaCapital; return Ok(result); } [HttpDelete(Name ="EliminaUF")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] public ActionResult<IEnumerable<UF>> EliminaUF(int DelId) { if (DelId == 0) { return BadRequest(); } UF result = UFs.Find(x => x.Id == DelId); if (result == null) { return NotFound(); } UFs.Remove(result); return Ok(UFs); } } }
Próximo: