Usar el método post de un servicio APIs REST desde C#

1

Ya comentamos como se puede usar un servicio web APIs REST desde C# haciendo uso de su método GET, pero hoy os quiero mostrar cómo usar los métodos post de estos servicios que se usan para envío de información a al servicio.

Antes de nada, os pido disculpas por no poder poneros un servicio web donde poder hacer vuestras pruebas, me he basado en código propio, cambio los datos reales por valores ficticios.

Vamos a usar una clase que me nos a hacer todos muchos más fácil, JavaScriptSerializer.

 

JavaScriptSerializer ser = new JavaScriptSerializer();

 

Recordar que deberéis usar el espacio de nombres System.Web.Script.Serialization, como lo vamos a usar más de una vez, os recomiendo que lo añadáis a vuestras referencias using.

A mí personalmente, me gusta poner las URI de los métodos del servicio web en una variable, por si tenemos entorno de pruebas y producción o simplemente tener que reutilizar código, que sea todo mucho más sencillo.

string sUrlRequest = "https://miserviciosrest.biz/stock_prec”;

El siguiente paso será crear nuestra petición http, estamos construyendo una especie de “formulario”, para que os hagáis una idea.:

var httpWebRequest = (HttpWebRequest)WebRequest.Create(sUrlRequest);

httpWebRequest.ContentType = "application/json";

httpWebRequest.Method = "POST";

Ahora vamos a construir el archivo JSON que vamos a enviar dentro del cuerpo de nuestro “formulario”. Nuestro JSON deberá tener una estructura específica, que nos habrá facilitado nuestro proveedor del servicio.

En mi ejemplo, es un servicio APIs REST para consultar productos por código de artículo, en la consulta debo indicar el código de producto y si la búsqueda la hago por código de proveedor o por el código de mi empresa.

Voy a necesitar una clase para crear el objeto que después transformaré en formato JSON, mi clase para consultar es esta:

public class PrecioStockConsulta

{

public string id_artic { get; set; }

public string tipo_id { get; set; }

}

Como mi servicio necesita el envío de un array o vector, para poder consultar en la misma petición varios productos, por lo que tengo que construir mi JSON así:

var exPrecioStockConsulta = new List<PrecioStockConsulta>();


exPrecioStockConsulta.Add(new PrecioStockConsulta ()

{

id_artic = “CódigoAConsultar1”,

tipo_id = "n"

});


exPrecioStockConsulta.Add(new PrecioStockConsulta ()

{

id_artic = “CódigoAConsultar2”,

tipo_id = "n"

});


exPrecioStockConsulta.Add(new PrecioStockConsulta ()

{

id_artic = “CódigoAConsultar3”,

tipo_id = "n"

});

Vale ya tenemos nuestro objeto creado para poder hacer uso del método POST de nuestro servicio REST, pues ahora debemos transformarlo en JSON, tan fácil como esto:

var jsonBodyConsulta = new JavaScriptSerializer().Serialize(exPrecioStockConsulta);

using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))

{

streamWriter.Write(jsonBodyConsulta);

streamWriter.Flush();

}

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))

{

var result = streamReader.ReadToEnd();

PrecioStockRespuesta exaPrecioStockRespuesta = ser.Deserialize<PrecioStockRespuesta>(result);

}

Como veis mi servicio APIs REST me contesta a mi pregunta de códigos con información sobre su precio y stock, para ello uso esta clase:

public class PrecioStockRespuesta

{

public int count { get; set; }

public List<Item> items { get; set; }

public List<string> errores { get; set; }

}

Tanto PrecioStockRespuesta como PrecioStockConsulta, son clases especificas del servicio que utilizo. Cuando uso  json2csharp, en este caso porque la estructura es muy simple, pero cuando se complica te ahorra mucho trabajo.

Bueno, pues así de simple es consumir el método POST de una APIs REST desde C#

1

Deja un comentario