ASP .NET Core - Criando recursos com HTTP POST


 Hoje veremos como criar recursos usando o atributo HttpPost em uma Web API da ASP .NET Core.

A ASP .NET Core permite criar serviços RESTful, ou seja, aderente ao estilo REST, também conhecidos como Web APIs ou APIs da Web, usando a linguagem C#.

Para lidar com as requisições, uma WEB API ASP .NET Core usa os Controllers ou controladores que são classes C# que derivam da classe ControllerBase.

Assim, os controladores devem derivar da classe ControllerBase e não da classe Controller.

A classe Controller (que é derivada da classe ControllerBase) inclui suporte a views e à manipulação de páginas web e não à requisições de uma WEB API.

Já a classe ControllerBase fornece muitas propriedades e métodos para tratar com requisições HTTP.

A seguir temos alguns métodos fornecidos pela classe ControllerBase:

Para usar os últimos cenários de roteamento no ASP.NET Core,  especifique a versão de compatibilidade com o registro de serviços MVC em Startup.ConfigureServices:

...
  services.AddMvc()
      .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
...

Criando um recurso com HttpPost

Ao criar um recurso em uma WEB API usamos o método HTTP POST e decoramos o método do controlador com o atributo HttpPost passando os dados a serem criados no corpo da requisição.

No trecho de código a seguir temos um controlador relacionado com clientes, chamado ClientesController, que inclui dados de um novo cliente.

[HttpPost]
public async Task<ActionResult<Cliente>> Post([FromBody] Cliente cliente)
{
    _context.Clientes.Add(cliente);
    await _context.SaveChangesAsync();
    return CreatedAtRouteResult(nameof(GetCliente), new { id = cliente.Id }, cliente);
}

Qual o retorno que um método HTTP POST deve ter ?

O retorno deve ser o status code : 201 Created.

Para isso devemos colocar no cabeçalho Location da resposta HTTP a URL do novo recurso criado e, além disso, no corpo da resposta, devemos colocar o novo recurso.

Para nós ajudar, a ASP .NET Core fornece a classe CreatedAtRoutedResult que é um ActionResult que retorna uma response '201 Created' com o header Location.

Assim CreatedRouteResult :

O trecho de código o atributo [FromBody] indica que a informação do cliente vem no body da requisição HTTP, e, o retorno usa CreateAdRouteResult() para retornar '201 Created' caso o recurso tenha sido criado.

Nota: Podemos aplicar o atributo [ApiController] a uma classe do controlador para habilitar comportamentos específicos da WEB API. Usando este atributo não precisamos utilizar os atributos [FromBody] nem realizar a vlaidação do ModelState.

Na próxima parte do artigo veremos como atualizar um recurso usando HTTP PUT.

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

Referências:


José Carlos Macoratti