C#: Ejemplo llamada asíncrona HTTPGET

Tiempo de lectura: < 1 minuto
//Usings.
using Newtonsoft.Json;
using PoC.Servicios.Models;
using System;
using System.Net.Http;
using System.Threading.Tasks;

/// <summary>
/// Modelo UserModel.
/// </summary>
public class UserModel
{
  public int id { get; set; }
  public string email { get; set; }
  public string first_name { get; set; }
  public string last_name { get; set; }
  public string avatar { get; set; }
}

/// <summary>
/// Modelo UserResultModel.
/// </summary>
public class UserResultModel
{
  public int page { get; set; }
  public string per_page { get; set; }
  public string total { get; set; }
  public string total_pages { get; set; }
  public List<UserModel> data { get; set; }
}

/// <summary>
/// Método para realizar una llamada HTTPGET de forma asíncrona.
/// </summary>
/// <remarks>
/// Como ejemplo se ha usado un servicio público sin autorización, que devuelve un json con un listado de usuarios.
/// </remarks>
/// <returns></returns>
public static async Task PoCGetAsync()
{
  //Dirección del servicio.
  string url = "https://reqres.in/api/users";

  using (HttpClient client = new HttpClient())
  {
    //Invocar al servicio.
    HttpResponseMessage response = await client.GetAsync(url);

    if (response.IsSuccessStatusCode)
    {
      //Leer respuesta.
      string responseBody = await response.Content.ReadAsStringAsync();

      //Deserialización de datos a objeto UserResultModel.
      UserResultModel userResultModel = JsonConvert.DeserializeObject<UserResultModel>(responseBody);

      //Mostrar datos en la consola.
      Console.WriteLine(string.Format("Página: {0}", userResultModel.page));
      Console.WriteLine(string.Format("Resultados por página: {0}", userResultModel.per_page));
      Console.WriteLine(string.Format("Total resultados: {0}", userResultModel.total));
      Console.WriteLine(string.Format("Total páginas: {0}", userResultModel.total_pages));
      Console.WriteLine();
      Console.WriteLine("Resultados:");
      foreach (var user in userResultModel.data)
      {
        Console.WriteLine(string.Format("{0} {1} - {2}", user.first_name, user.last_name, user.email));
      }
    }
    else
    {
      Console.WriteLine("Error en la solicitud. Código de estado: " + response.StatusCode);
    }
  }
}

Deja un comentario