none
Devolver un objeto en una API y consumirlo desde otro proyecto RRS feed

  • Pregunta

  • Hola, estoy con un problema desarrollando una API, donde tengo que devolver una respuesta. Anteriormente usaba Request.CreateResponse, pero aparentemente en Visual Studio 2019 entiendo que quedó obsoleto.

    Tengo este metodo login en un controlador de la API:

            [HttpGet]
            public HttpResponseMessage Login(oPeticion peticion)  
            {           
                HttpResponseMessage respuesta = new HttpResponseMessage();
    
                try
                {
                    objUsuario usu = new objUsuario();
                    usu.Nombre = "Pepe";
                    usu.Apellido = "Ron";
    
                    respuesta.StatusCode = HttpStatusCode.OK;
                    //devolver el objeto usu como respuesta
                    
                }
                catch (Exception ex)
                {
                    respuesta.StatusCode = HttpStatusCode.InternalServerError;    
                    //devolver ex.Message como respuesta           
                }
                
                return respuesta;
            }


    Me estaría faltando devolver un objeto como respuesta, o un mensaje de error en caso de que no funcione.

    Como puedo hacer esta parte sin usar el CreateResponse?

    También estoy haciendo otro proyecto que necesita consumir esa api y recibir el objeto "usu", llego hasta el get response y funciona bien llamando a la API, pero no se como obtener el resultado

                    string url = @"www.localhost:4040/login/login?email=" + email;
    
                    
                    var request = (HttpWebRequest)WebRequest.Create(url);
                    request.Method = "GET";
                    request.ContentType = "application/json";
                    request.Accept = "application/json";
                   
    
                    try
                    {
                        using (WebResponse response = request.GetResponse())
                        {
                            //aca necesitaría saber si me devolvio un statuscode 200
                            //y leer el objeto de respuesta que me devuelve la API
    
                            //si me da un statuscode 500 u otro generaría un error
                        }
                    }
                    catch (WebException ex)
                    {
                         //---
                    }

    Espero puedan darme una mano.

    Gracias!


    • Editado programinca miércoles, 13 de enero de 2021 13:37
    miércoles, 13 de enero de 2021 13:36

Respuestas

  • Hola, puedes retornar un IActionResult que ya devuelves el código de error
    [HttpGet]
    public IActionResult Login(oPeticion peticion) 
    { 
      ....
      return Ok(objUsuario)
    }



    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Marcado como respuesta EricRRModerator viernes, 15 de enero de 2021 16:08
    miércoles, 13 de enero de 2021 16:51
    Moderador
  • En cuanto a tu segunda pregunta puedes obtener el código de estado así

    using (WebResponse response = request.GetResponse())
    {
            HttpWebResponse httpResponse = (HttpWebResponse)response;
            Console.WriteLine("Error code: {0}", httpResponse.StatusCode);
            using(Stream receiveStream = response.GetResponseStream ())
            {
    
              using(StreamReader readStream = new StreamReader (receiveStream, Encoding.UTF8))
              {
                Console.WriteLine ("Response stream received.");
                Console.WriteLine (readStream.ReadToEnd ());
              }
           }
       // Con ReadToEnd() recuperas un string. Deberías deserializarlo al objeto concreto
    }


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    miércoles, 13 de enero de 2021 17:00
    Moderador

Todas las respuestas

  • Hola,

    Gracias por levantar tu consulta en los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    miércoles, 13 de enero de 2021 15:16
    Moderador
  • Hola, puedes retornar un IActionResult que ya devuelves el código de error
    [HttpGet]
    public IActionResult Login(oPeticion peticion) 
    { 
      ....
      return Ok(objUsuario)
    }



    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    • Marcado como respuesta EricRRModerator viernes, 15 de enero de 2021 16:08
    miércoles, 13 de enero de 2021 16:51
    Moderador
  • En cuanto a tu segunda pregunta puedes obtener el código de estado así

    using (WebResponse response = request.GetResponse())
    {
            HttpWebResponse httpResponse = (HttpWebResponse)response;
            Console.WriteLine("Error code: {0}", httpResponse.StatusCode);
            using(Stream receiveStream = response.GetResponseStream ())
            {
    
              using(StreamReader readStream = new StreamReader (receiveStream, Encoding.UTF8))
              {
                Console.WriteLine ("Response stream received.");
                Console.WriteLine (readStream.ReadToEnd ());
              }
           }
       // Con ReadToEnd() recuperas un string. Deberías deserializarlo al objeto concreto
    }


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    miércoles, 13 de enero de 2021 17:00
    Moderador