1
resposta

Consuimer Api

Ola eu gostaria de saber o que devo utilizar para consumir uma api json , no meu código c# asp net core.

Por exemplo essa api: https://viacep.com.br/ws/01001000/json/unicode/

consumir uma api através do link.

1 resposta

Olá Vitor, tudo bem?

Seria basicamente tudo que é ensinado nesta aula. Neste caso o objeto que chegaria na resposta do GetAsync() precisa ser alocado em um objeto com as características desse endereço em json. As propriedades precisam ter o mesmo nome das propriedades do objeto Json. Se for minúsculo, tem que ser minúsculo.

Caso queira manter a classe Endereço, por exemplo, com as propriedades iniciadas em maiúsculas, você pode utilizar a anotação [JsonProperty("name")] para linkar as propriedades da classe com as propriedades do json.

Pegando todo esse conceito, consegui bolar uma aplicação console que lê exatamente esse esse endpoint que você passou (tirando a parte do unicode, porque ele mais atrapalha que ajuda) e consegui colocar as informações dentro da aplicação com o seguinte código:

using Newtonsoft.Json;
using System;
using System.Net.Http;
using System.Threading.Tasks;

namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
            Executar().Wait();
        }

        private static async Task<string> PegaJson()
        {
            HttpClient cliente = new HttpClient();
            HttpResponseMessage resposta = await cliente.GetAsync("https://viacep.com.br/ws/01001000/json/");
            resposta.EnsureSuccessStatusCode();

            return await resposta.Content.ReadAsStringAsync();
        }

        private static async Task Executar()
        {
            var json = await PegaJson();
            Console.WriteLine(json);
        }
    }

    public class Endereco
    {
        [JsonProperty("cep")]
        public string CEP { get; set; }
        [JsonProperty("logradouro")]
        public string Logradouro { get; set; }
        [JsonProperty("complemento")]
        public string Complemento { get; set; }
        [JsonProperty("bairro")]
        public string Bairro { get; set; }
        [JsonProperty("localidade")]
        public string Localidade { get; set; }
        [JsonProperty("uf")]
        public string UF { get; set; }
        [JsonProperty("unidade")]
        public string Unidade { get; set; }
        [JsonProperty("ibge")]
        public string IBGE { get; set; }
        [JsonProperty("gia")]
        public string Gia { get; set; }
    }
}

Alguns pontos a ressaltar:

  • No método Main() tem a chamada do método Executar() com a função Wait(). Isso ocorre porque desde o momento que o endpoint é acessado com o método GetAsync(), tudo é retornado como uma Task. E esse método serve para dizer que a execução deve ser aguardada, já que o método Main() não é assíncrono.

  • O retorno do método que acessa o endpoint foi do tipo Task<string> porque essa é uma aplicação console e não tem suporte ao retorno do tipo Task<IActionResult>.

  • Assim como também não tinha acesso ao método ReadAsAsync<T> tive que me virar com o Json apenas como uma tarefa de texto puro utilizando o método ReadAsStringAsync().

Espero ter ajudado!