ASP.NET Core 2.1 - Web API : Novidades
Hoje vou apresentar as principais novidades introduzidas na versão 2.1 da ASP .NET Core relativas a criação de Web API. |
Na versão 2.1 da ASP .NET Core foi introduzido um novo conjunto de Tipos para criar controladores Web API.
Neste artigo eu vou abordar dois tipos: ControllerBase e ApiController e o atributo Route.
1 - ControllerBase
Agora os controladores podem herdar da classe ControllerBase (é o padrão) que é mais adequada para APIs da Web visto que omite as funcionalidades de suporte a Views.
A classe ControllerBase fornece acesso a várias propriedades e métodos.
No trecho de código a seguir temos o controlador PetsController herdando de ControllerBase:
[Produces("application/json")]
[Route("api/[controller]")]
public class PetsController : ControllerBase
{
private readonly PetsRepository _repository;
public PetsController(PetsRepository repository)
{
_repository = repository;
}
[HttpGet]
public async Task<ActionResult<List<Pet>>> GetAllAsync()
{
return await _repository.GetPetsAsync();
}
[HttpGet("{id}")]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<ActionResult<Pet>> GetByIdAsync(int id)
{
var pet = await _repository.GetPetAsync(id);
if (pet == null)
{
return NotFound();
}
return pet;
}
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<ActionResult<Pet>> CreateAsync(Pet pet)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
await _repository.AddPetAsync(pet);
return CreatedAtAction(nameof(GetByIdAsync),
new { id = pet.Id }, pet);
}
}
|
Observe a inclusão dos métodos:
Esses métodos são chamados em métodos Action para retornar códigos de status HTTP 400 e 201, respectivamente. A propriedade ModelState, também fornecida por ControllerBase, é acessada para manipular a validação do modelo de solicitação.
Neste contexto o código para tratar os erros de validação de modelo que disparam uma resposta HTTP 400, conforme mostrado a seguir:
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
|
Torna-se desnecessário.
2- ApiController
O novo atributo [ApiController] permite decorar os controladores habilitando novos recursos como :
[Route("api/[controller]")]
[ApiController]
public class ProductsController : ControllerBase
{
}
|
O atributo ApiController permite acionar automaticamente erros de validação para uma reposta HTTP 400 e torna desnecessário definir explicitamente os atributos [FromBody], [FromRoute],[FromForm],[FromServices], etc.
Sem o atributo [ApiController] ou outros atributos de binding source como [FromQuery], o runtime da ASP.NET Core tenta usar o modelo de objeto complexo que extrai dados dos provedores de valor (que têm uma ordem definida).
Este recurso (ApiController) é usado em conjunto com o ControllerBase para permitir o comportamento específico do REST para controladores.(A classe ControllerBase fornece acesso a métodos como NotFound e File.)
Nota: Uma versão de compatibilidade do 2.1 ou posterior, definida via SetCompatibilityVersion, é necessária para usar este atributo no nível do controlador. Por exemplo, o código destacado em método ConfigureServices da classe define o sinalizador de compatibilidade 2.1:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
|
O método SetCompatibilityVersion permite que um aplicativo aceite ou recuse as possíveis alterações da falha de comportamento introduzidas no ASP.NET Core MVC 2.1 ou posteriores.
Essas possíveis alterações da falha de
comportamento geralmente afetam como o subsistema MVC se comporta e como o
código do usuário é chamado pelo runtime. Ao aceitar, você obtém o comportamento
mais recente e o comportamento de longo prazo do ASP.NET Core.
Obs: Os comportamentos antigos compatíveis por meio de opções de
compatibilidade serão removidos na versão 3.0. (Segundo a Microsoft)
3 - Atributo Route
O roteamento de atributo agora se torna um requisito.
[Route("api/[controller]")]
[ApiController]
public class ProductsController : ControllerBase
{
}
|
Dessa forma, as Actions são inacessíveis por meio de rotas convencionais definidas em UseMvc ou por UseMvcWithDefaultRoute, no método Configure da classe Startup.
E estamos conversados...
(Disse Jesus) - "Então
aparecerá no céu o sinal do Filho do homem; e todas
as tribos da terra se lamentarão, e verão o Filho do
homem, vindo sobre as nuvens do céu, com poder e
grande glória."
Mateus 24:30
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 - Macoratti
Conceitos - .NET Framework versus .NET Core - Macoratti
ASP .NET Core - Conceitos Básicos - Macoratti.net
ASP .NET Core MVC - CRUD básico com ADO .NET - Macoratti
ASP .NET Core - Implementando a segurança com ... - Macoratti.net
ASP .NET Core - Apresentando Razor Pages - Macoratti
Minicurso ASP .NET Core 2.0 - Autenticação com JWT - I - Macoratti
Minicurso ASP .NET Core 2.0 - Autenticação com JWT - II - Macoratti.net