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.
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!