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: