Facebook Pixel
Criando Endpoints REST API com C#, Visual Studio e .NET Core – HTTP Put e Patch

Criando Endpoints REST API com C#, Visual Studio e .NET Core – HTTP Put e Patch

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:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *