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.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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.
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!