ASP .NET Core MVC - Recebendo dados em diferentes formatos - VII


  Neste artigo vamos iniciar a criação de uma WEB API usando a ASP .NET Core 3.0 para a seguir mostrar como consumir a API em uma aplicação ASP .NET Core MVC.

Continuando a sexta parte do artigo veremos agora como receber dados em diferentes formatos.

A ASP .NET COre MVC sempre retornar dados no formato JSON para o cliente se os métodos Action tiverem o tipo de retorno diferente de string.

Podemos constatar isso executando o projeto ApiReservas e acessando a url: https://localhost:44311/api/reservas

Vemos aqui o retorno no formato JSON de todas as reservas.

Se você marcar os "Cabeçalhos de resposta", nas Ferramentas para desenvolvedores do FireFox, encontrará Content-Type como "application/json" conforme mostra a imagem a seguir:

Mas e se eu precisar obter os dados no formato XML, por exemplo ?

Para alterar a forma de obter os dados para XML precisamos adicionar o método AddXmlDataContractSerializerFormatters() na classe Startup no método ConfigureServices:

        ...
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddScoped<IRepository,Repository>();
            services.AddControllers().
AddXmlDataContractSerializerFormatters();
        }
       
...

A seguir nos métodos Action GET do controlador ReservasController vamos incluir o atributo [Produces(“application/xml”)] para forçar o formato para XML.

        [HttpGet]
        [Produces("application/xml")]
        public IEnumerable<Reserva> Get() => repository.Reservas;

        [HttpGet("{id}")]
        [Produces("application/xml")]
        public Reserva Get(int id) => repository[id];

Após essas alterações executando a aplicação novamente iremos obter o seguinte:



Agora estamos recebendo os dados no formato XML.

Recebendo dados em formatos distintos

Podemos também especificar que diferentes Actions tratem com formatos específicos usando o atributo [Consumes].

Vamos alterar o método POST do projeto criando dois métodos Action Post que tratam com formatos de dados diferentes.

        [HttpPost]
        [Consumes("application/json")]
        public Reserva PostJson([FromBody] Reserva res) =>
        repository.AddReserva(new Reserva
        {
            Nome = res.Nome,
            InicioLocacao = res.InicioLocacao,
            FimLocacao = res.FimLocacao
        });

        [HttpPost]
        [Consumes("application/xml")]

        public Reserva PostXml([FromBody] Reserva res) =>
        repository.AddReserva(new Reserva
        {
            Nome = res.Nome,
            InicioLocacao = res.InicioLocacao,
            FimLocacao = res.FimLocacao
        });

 

A Actions PostJson e PostXml aceitam solicitações POST, mas a diferença entre elas é o formato de dados especificado com o atributo Consumes.

O atributo Consumes examina o cabeçalho Content-Type na solicitação HTTP dos clientes e decide se o método Action pode processar a solicitação.

Quando houver uma solicitação cujo Content-Type  estiver definido como application/json, o método PostJson será usado; já se o header do Content-Type for application/xml, o método PostXml será usado.

Com isso concluímos essa série de artigos mostrando a criação de uma Web API ASP .NET Core.

"Quem ama a sua vida perdê-la-á, e quem neste mundo odeia a sua vida, guardá-la-á para a vida eterna.
Se alguém me serve, siga-me, e onde eu estiver, ali estará também o meu servo. E, se alguém me servir, meu Pai o honrará."
João 12:25,26

Referências:


José Carlos Macoratti