ASP .NET Core 2.2 - Atualizando recursos com HTTP PUT
Hoje veremos como atualizar recursos usando o atributo HttpPut em uma Web API da ASP .NET Core 2.2. |
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 2.2, especifique a versão de compatibilidade com o registro de serviços MVC em Startup.ConfigureServices:
...
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
...
|
Atualizando um recurso com HttpPut
Ao atualizar um recurso existente usando o método HTTP Put, ele deve estar completo, ou seja, devemos atualizar todos os campos do recurso, e, para isso, temos que receber todos os dados do recurso.
A resposta desta operação deve ser um código de status : 200 OK ou um 204 No Content.
Segundo a lista de código de status HTTP temos que:
No trecho de código a seguir temos um controlador relacionado com clientes, chamado ClientesController, que atualiza dados de um cliente.
[Route("v1/clientes")] [HttpPut("{id}") public async Task<ActionResult> Put(int id, [FromBody] Cliente cliente) {
if (cliente.ClienteId
!= id){
return BadRequest();
}
_context.Entry(cliente).State = EntityState.Modified;
await _context.SaveChangesAsync();
return NoContent();
}
|
No método Action Put usamos o atributo HttpPut definindo o parâmetro id que deverá ser recebido no request. Definimos a rota como 'v1/clientes'.
No código o atributo [FromBody] indica que a informação do cliente vem no body da requisição HTTP.
A seguir verificamos se o parâmetro id recebido coincide com o id do cliente (ClienteId) enviado no body do request. Se não coincidir retornamos um código de status 400 Bad Request.
A seguir marcamos o objeto cliente como modificado e a seguir atualizamos os dados usando o método assíncrono SaveChangesAsync().
Qual o retorno que um método HTTP PUT deve ter ?
O retorno deve ser o status code : 200 OK ou 204 No Content.
No exemplo estamos retornando 204 No Content, para retornar 200 Ok a linha de código do return ficaria assim:
[Route("v1/clientes")] [HttpPut("{id}") public async Task<ActionResult> Put(int id, [FromBody] Cliente cliente) {
if (cliente.ClienteId
!= id){
return BadRequest();
}
_context.Entry(cliente).State = EntityState.Modified;
await _context.SaveChangesAsync();
return Ok();
}
|
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 validação do ModelState.
Assim usamos o HTTP PUT para fazer uma atualização completa de um recurso. Uma desvantagem dessa abordagem é que precisamos que o usuário envie todos os campos do recurso para poder realizar a atualização.
Para podermos realizar uma atualização parcial e assim não precisar receber todos os campos devemos usar o método HTTP PATCH.
Vamos ver isso na próxima parte do artigo.
"Eu sou o caminho a verdade e a vida. Ninguém vem a o Pai a não ser por Mim." (Jesus)
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 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
ASP .NET Core 2 - MiniCurso Básico - Macoratti
ASP .NET Core MVC - CRUD básico com ADO .NET - Macoratti
ASP .NET Core - Implementando a segurança com ... - Macoratti
ASP .NET Core - Acessando dados com Entity Framework ... - Macoratti
ASP .NET Core - Gerenciador de Despesas Pessoais com ... - Macoratti
ASP .NET Core - Criando sua primeira Web API com ASP ... - Macoratti
ASP .NET Core - Criando uma Web API com CRUD básico ... - Macoratti
ASP .NET Core - Criando uma API CRUD - I - Macoratti
Minicurso ASP .NET Core 2.0 - Criando uma Web API - YouTube
Curso ASP .NET Core 2.0 - Comprar em Macoratti.net