Foros del Web » Programación para mayores de 30 ;) » .NET »

Consumo de servicio REST desde AJAX jQuery

Estas en el tema de Consumo de servicio REST desde AJAX jQuery en el foro de .NET en Foros del Web. Hola buenas a [email protected], Tengo una duda respecto a como debo construir tanto la Uritemplate del WebInvoke de uno de los métodos de un servicio ...
  #1 (permalink)  
Antiguo 15/04/2017, 13:24
Avatar de Ratus-BROWN  
Fecha de Ingreso: febrero-2009
Ubicación: Valencia
Mensajes: 168
Antigüedad: 8 años, 4 meses
Puntos: 8
Consumo de servicio REST desde AJAX jQuery

Hola buenas a [email protected],

Tengo una duda respecto a como debo construir tanto la Uritemplate del WebInvoke de uno de los métodos de un servicio REST, como su consumo mediante una llamada AJAX:

La duda que tengo es que quiero que el "OperationContract" sea mediante el paso de un objeto y no de por parámetros:


Código C:
Ver original
  1. [OperationContract]
  2. [WebInvoke(UriTemplate = "/alumno/{a}", Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
  3. Alumno nuevoAlumno(Alumno a);

Este es un método que forma parte del contrato del servicio REST, como podemos observar la Uritemplate está formada por un ruta definida, que es la que utilizaremos para invocar al método del servicio.

Por otro lado tenemos la llamada AJAX con la que vamos a consumir el servicio:


Código Javascript:
Ver original
  1. var a = { "a": {"Nombre":"aaar","DNI": 1, "FechaNac": "222", "Edad": 2} };
  2.  
  3.  
  4.                 $.ajax({
  5.                     url: "http://localhost:2133/ServicioREST/alumno/{" + a + "}",
  6.                     method: 'get',
  7.                     dataType: 'json',  
  8.                     success: function (data) {
  9.  
  10.                         alert("Exito");
  11.              
  12.                     },
  13.                     error: function (err) {
  14.                         alert(err);
  15.                     }
  16.  
  17.                 });

Mi duda es: ¿Es posible consumir el servicio enviando el objeto "a" directamente al método (WebInvoke), o la buena práctica es hacer el paso por parámetros individuales y no encapsular la información en un objeto como en el ejemplo?

Al hacerlo de esta forma siempre me da errores a la hora de intentar consumir el servicio.

Gracias.
__________________
Disturb_downstairs (....we are cooking!)
  #2 (permalink)  
Antiguo 19/04/2017, 23:13
 
Fecha de Ingreso: noviembre-2002
Ubicación: DF
Mensajes: 1.033
Antigüedad: 14 años, 7 meses
Puntos: 37
Respuesta: Consumo de servicio REST desde AJAX jQuery

Yo tengo definido mi WS asi:
<OperationContract()>
<WebInvoke(Method:="*", BodyStyle:=WebMessageBodyStyle.WrappedResponse, ResponseFormat:=WebMessageFormat.Json, RequestFormat:=WebMessageFormat.Json, UriTemplate:="/getValidarCuenta")>
Function getINSCRIPCIONES_ValidarCuenta(ByVal pDataInscripcionesLogin As dataInscripcionesLogin) As dataPreinscripcion

El objeto que envio al hacer el request es por POST, principalmente por que no quiero tener problemas de truncamiento de informacion si lo mando por GET (en mi codigo no estoy mandando nada en el request por get).

Donde: pDataInscripcionesLogin
Es un objeto definido tanto en el cliente como en el servidor.
La cadena JSON que envio es asi:
{"RK":"EVENTOTEST","UsuarioRecupera":"usuario","Pa sswordRecupera":"pwd","NuevaCuenta":"","NuevaCuent aUsuario":"","NuevaCuentaPassword":"","UnicaVez":" N"}

Veo que tu tienes definido:BodyStyle = WebMessageBodyStyle.Bare
Prueba con: BodyStyle:=WebMessageBodyStyle.WrappedResponse

No he usado AJAX pero las solicitudes que hago, pero en mi caso los clientes tienen el Content Type:application/json (no solo "json" como veo que lo tienes definido.

Te recomiendo que instales "poster" que es un plugin del Firefox que abrira una ventana donde te permite hacer peticiones a tu WS tanto GET o POST(no lo he probado con localhost, pero imagino debe funcionar).

https://www.youtube.com/watch?v=WvgZNhc5wgg

Asi, puedes incluir en el body del mensaje tu JSON de envio como string y ver como te responde el servidor.



La zona horaria es GMT -6. Ahora son las 07:59.