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:


José Carlos Macoratti