[WebAPI] Consumiendo servicios WebAPI con HttpClient

ASP.NET WebAPI nos proporciona también un cliente HTTP (System.Net.Http.HttpClient) para consumir servicios de WebAPI desde clientes .NET. System.Net.Http.HttpClient nos proporciona la funcionalidad básica para enviar peticiones y recibir respuestas.

Para empezar a trabajar con System.Net.Http.HttpClient podemos hacer uso de Nuget e instalar el paquete Microsoft.AspNet.WebApi.Client:

image

Una vez instalado, escribimos el siguiente fragmento de código:

using (var httpClient = new HttpClient())

{

    httpClient.BaseAddress = new Uri("http://localhost:12534/api/");

 

    var response = await httpClient.GetAsync("products");

    var products = await response.Content.ReadAsAsync<List<Product>>();

 

    foreach (var product in products)

    {

        Console.WriteLine("Product: {0}", product.Name);

    }

}

 

Console.Read();

Lo que estamos haciendo es crear una instanacia de HttpClient. A continuación a la propiedad BaseAdress le asignamos el valor de la url de nuestra api (Sin recurso, la dirección base). Posteriormente, haciendo uso de las nuevas características de C# 5 async await, hacemos una petición con el método GetAsync pasándole el nombre del recurso (products en este caso) para recuperar todos los productos. Esto nos devolverá un objecto del tipo HttpResponseMessage (Si has trabajado con WebAPI te sonará y sino te suena, básicamente junto con la clase HttpRequestMessage sirven para manejar los mensajes de petición y respuesta HTTP). Por último, con la respuesta accedemos al contenido por medio de la propeidad Content y con el método ReadAsync<>, deserializamos el contenido y lo convertimos en una lista de productos que posteriormente iteramos y mostramos por pantalla.

También podéis usar HttpClient en Windows Phone, Windows 8…

http://www.hanselman.com/blog/NuGetPackageOfTheWeek13PortableHttpClientMakesPortableLibrariesMoreUseful.aspx

Un saludo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *