Principales respuestas
Consumo de API REST

Pregunta
-
Hola a todos, tengo una aplicación la cual está consumiendo servicios web realizados en arquitectura SOAP, con esto el consumo es correcto, pero ahora tengo un inconveniente con el consumo de servicios web realizados en REST estoy usando la libreria HTTPCLIENT, pero no he logrado realizar el consumo, alguien tiene algunos tutoriales o demás?
Gracias por su ayuda.
Respuestas
-
Particularmente no manejo muy bien aun la consumición de los servicios rest pero para practicar podrías probar primeramente algunos servicios web gratuitos como el de esta pagina que yo utilizo para practicas groupkt.com y seguir este tutorial servicios web rest con ejemplos post, get y deja descargar el proyecto con los métodos, existen muchas formas o ejemplos de como consumir pero para tener una base podría servirte, probé el método get y funciona
protected void Page_Load(object sender, EventArgs e) { string UrlBase = "http://services.groupkt.com/country/search"; Dictionary<string, string> Parametros = new Dictionary<string, string>(); Parametros.Add("text", "in");//parametros a buscar var resultado = GetResponse_GET(UrlBase, Parametros); Response.Write(resultado.ToString()); }
private static string ConcatParams(Dictionary<string, string> parameters) { bool FirstParam = true; StringBuilder Parametros = null; if (parameters != null) { Parametros = new StringBuilder(); foreach (KeyValuePair<string, string> param in parameters) { Parametros.Append(FirstParam ? "" : "&"); Parametros.Append(param.Key + "=" + System.Web.HttpUtility.UrlEncode(param.Value)); FirstParam = false; } } return Parametros == null ? string.Empty : Parametros.ToString(); }
public static string GetResponse_GET(string url, Dictionary<string, string> parameters) { try{ //Concatenamos los parametros, OJO: antes del primero debe estar el caracter "?" string parametrosConcatenados = ConcatParams(parameters); string urlConParametros = url + "?" + parametrosConcatenados; System.Net.WebRequest wr = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(urlConParametros); wr.Method = "GET"; wr.ContentType = "application/x-www-form-urlencoded"; System.IO.Stream newStream; // Obtiene la respuesta System.Net.WebResponse response = wr.GetResponse(); // Stream con el contenido recibido del servidor newStream = response.GetResponseStream(); System.IO.StreamReader reader = new System.IO.StreamReader(newStream); // Leemos el contenido string responseFromServer = reader.ReadToEnd(); // Cerramos los streams reader.Close(); newStream.Close(); response.Close(); return responseFromServer; } catch (System.Web.HttpException ex) { if (ex.ErrorCode == 404) throw new Exception("Not found remote service " + url); else throw ex; } }
resultado en el navegador, si quieres obtener los datos y manejarlos tendrias que crear clases y maperlo
por ultimo algo que te ayudaría seria el postman donde puedes realizar consultas al servicio web, obtienes resultados y donde dice code te genera los codigos de la consulta en distintos lenguajes
Espero te sea de ayuda.
Saludos.
- Marcado como respuesta Felipe Suarez jueves, 27 de julio de 2017 18:35
Todas las respuestas
-
hola
Recibes algun mensaje de error cuando invocas el servicio rest ? Estas creado con asp.net mvc webapi?
Puedes validar que el host que expone el servicio esta iniciado, o sea si estan los proyectos en el misma solucion valida que el iis express este iniciado, salvo que este invocando el servicio deployado en un ambiente
Calling a Web API From a .NET Client (C#)
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina
- Editado Leandro TuttiniMVP miércoles, 26 de julio de 2017 13:25
-
Hola Leandro, estoy usando este método
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://127.0.0.1:8000/api/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response;
// HTTP POST
response = await client.PostAsync("backend/listarOrientador?salePoint=50010&tokenApi=123456");
if (response.IsSuccessStatusCode)
{
lblKioscoCode.Text = response + "";
}
}Pero me esta saliendo error en await client.PostAsync, dice que estoy haciendo mal el llamado del metodo
-
hola
>>Pero me esta saliendo error en await client.PostAsync, dice que estoy haciendo mal el llamado del metodo
cual es el mensaje exacto que recibes ?
veo que defienes application/json, pero no veo que asignes ninguno, porque pasas los valores en la url en lugar de enviarlos como datos en el post?
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina -
Leí lo que me pasaste, ahora mi método es así
public async void getUserByKiosc(string salePoint, string tokenApi)
{
client.BaseAddress = new Uri("http://127.0.0.1:8000/api/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.PostAsJsonAsync("backend/listarOrientador", salePoint + "&" + tokenApi);
if (response.IsSuccessStatusCode)
{
lblKioscoCode.Text = response.Headers.Location + "";
}
}Esta bien pasar así los datos post?
Una operación asincrónica no se puede comenzar en este momento. Solo se pueden comenzar operaciones asincrónicas dentro de un controlador o módulo asincrónico o durante ciertos eventos en el ciclo de vida de la página. Si esta excepción se produjo mientras se ejecutaba una página, asegúrese de que la página esté marcada con <%@ Page Async="true" %>. Esta excepción puede también indicar que se intentó llamar a un método "async void" que generalmente no es compatible con el procesamiento de solicitudes de ASP.NET. En su lugar, el método asincrónico debería devolver una Tarea y el llamador debería esperarla.
-
Particularmente no manejo muy bien aun la consumición de los servicios rest pero para practicar podrías probar primeramente algunos servicios web gratuitos como el de esta pagina que yo utilizo para practicas groupkt.com y seguir este tutorial servicios web rest con ejemplos post, get y deja descargar el proyecto con los métodos, existen muchas formas o ejemplos de como consumir pero para tener una base podría servirte, probé el método get y funciona
protected void Page_Load(object sender, EventArgs e) { string UrlBase = "http://services.groupkt.com/country/search"; Dictionary<string, string> Parametros = new Dictionary<string, string>(); Parametros.Add("text", "in");//parametros a buscar var resultado = GetResponse_GET(UrlBase, Parametros); Response.Write(resultado.ToString()); }
private static string ConcatParams(Dictionary<string, string> parameters) { bool FirstParam = true; StringBuilder Parametros = null; if (parameters != null) { Parametros = new StringBuilder(); foreach (KeyValuePair<string, string> param in parameters) { Parametros.Append(FirstParam ? "" : "&"); Parametros.Append(param.Key + "=" + System.Web.HttpUtility.UrlEncode(param.Value)); FirstParam = false; } } return Parametros == null ? string.Empty : Parametros.ToString(); }
public static string GetResponse_GET(string url, Dictionary<string, string> parameters) { try{ //Concatenamos los parametros, OJO: antes del primero debe estar el caracter "?" string parametrosConcatenados = ConcatParams(parameters); string urlConParametros = url + "?" + parametrosConcatenados; System.Net.WebRequest wr = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(urlConParametros); wr.Method = "GET"; wr.ContentType = "application/x-www-form-urlencoded"; System.IO.Stream newStream; // Obtiene la respuesta System.Net.WebResponse response = wr.GetResponse(); // Stream con el contenido recibido del servidor newStream = response.GetResponseStream(); System.IO.StreamReader reader = new System.IO.StreamReader(newStream); // Leemos el contenido string responseFromServer = reader.ReadToEnd(); // Cerramos los streams reader.Close(); newStream.Close(); response.Close(); return responseFromServer; } catch (System.Web.HttpException ex) { if (ex.ErrorCode == 404) throw new Exception("Not found remote service " + url); else throw ex; } }
resultado en el navegador, si quieres obtener los datos y manejarlos tendrias que crear clases y maperlo
por ultimo algo que te ayudaría seria el postman donde puedes realizar consultas al servicio web, obtienes resultados y donde dice code te genera los codigos de la consulta en distintos lenguajes
Espero te sea de ayuda.
Saludos.
- Marcado como respuesta Felipe Suarez jueves, 27 de julio de 2017 18:35
-