none
Consumir web service con RestSharp RRS feed

  • Pregunta

  • Buenas tardes

          Junto con agradecer sus respuestas y ayudas, requiero de su ayuda para subir un documento a un web service Rest utilizando RestSharp, utilizando Postman obtuve el siguiente codigo de RestSharp

    var client = new RestClient(url);
    var request = new RestRequest(Method.POST);
    request.AddHeader("Postman-Token", postManToken);
    request.AddHeader("cache-control", "no-cache");
    request.AddHeader("Authorization", authorization);
    request.AddHeader("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
    request.AddParameter("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW", "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Dis-data; name=\"input3.pdf\"; filename=\"D:\\prueba.pdf\"\r\nContent-Type: application/pdf\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", ParameterType.RequestBody);
    IRestResponse response = client.Execute(request);

    Dicho codigo lo parametrice con los datos requeridos de mi aplicacion, pero aunque obtengo una respuesta positiva del web service el documento no fue subido al sistema, adjunto mi codigo espero contar con ayuda para poder solucionar este problema

    string ingreso = micredencial;
                string directorio = @"C:\Documento";
                string file = "Prueba_201904091117.pdf";
                string documento = Path.Combine(directorio, file);
                
                string fecha = (DateTime.Now).ToString("yyyyMMdd_HHmmss");
                string nameBatch="Hipotecario_"+Environment.MachineName+"_"+fecha;
                var client = new RestClient(url +nameBatch);
                var request = new RestRequest(Method.POST);
                request.AddHeader("cache-control", "no-cache");
                request.AddHeader("Authorization", "Basic "+ingreso+"");
                request.AddHeader("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
                request.AddFile("receipt[receipt_file]",File.ReadAllBytes(file), "Invoice.pdf", "application/octet-stream");
                request.AddParameter("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW", "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Dis-data; name=\"input3.pdf\"; filename=\""+documento+"\"\r\nContent-Type: application/pdf\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", ParameterType.RequestBody);
                IRestResponse response = client.Execute(request);
                var content = response.Content;
    
                string xml = content;
                XElement doc = XElement.Parse(xml);
                var codigo = doc.Descendants("HTTP_Code").First().Value;
                var id = doc.Descendants("ID").First().Value;
    
                if (codigo == "422")
                {
                    MessageBox.Show("Unprocessable Entity");
                }
                else if (codigo == "500")
                {
                    MessageBox.Show("Internal Server Error");
                }
                else if (codigo == "403")
                {
                    MessageBox.Show("Unautherized Access");
                }
                else if (codigo == "200")
                {
                    MessageBox.Show("Documento subido al sistema");
                }
                else
                {
                    MessageBox.Show("Error incomprendido");
                }
                MessageBox.Show("termine");
    Atento a sus comentarios.


    • Editado Sergio ParraModerator miércoles, 10 de abril de 2019 18:35 Eliminar datos sensibles de credenciales
    martes, 9 de abril de 2019 16:39

Respuestas

  • hola

    Ceo que la url la estas armand de forma dinamica en base a Environment.MachineName y una fecha, eso esta muy raro

    si pones un breakpoint en el codigo y tomas la url generada dinamicamente y la llevas a postman, puedes validar que resuelve correctamente?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 9 de abril de 2019 17:21
  • Buenas tardes Leandro,

          La URL dinamica que ingreso esta correcta y es aceptada por el web service ya que este se describe de la siguiente manera

    HOST/dcma/rest/uploadBatch/BC36/NombreInstancia

    URL web service: HOST/dcma/rest/uploadBatch/

    Proceso: BC36

    Nombre del archivo unico: NombreInstancia

    El problema es que el web service me acepta la informacion entregandome un ID especifico, pero no reconoce el archivo que deseo subir al sistema y queda en vacio


    martes, 9 de abril de 2019 18:03
  • Gracias Leandro por tu utilizando ayuda, tenia un problema en el codigo para poder subir el documento por medio de RestSharp, ahora tengo el codigo funcional y parametrizado.

    public void subirDocumento(string batch,string pathDocumento){
                string ingreso = micredencial;
                string directorio = @"C:\Documento";
                string file = "Prueba_201904091117.pdf";
                string documento = Path.Combine(directorio, file);
                
                string fecha = (DateTime.Now).ToString("yyyyMMdd_HHmmss");
                string nameBatch="Hipotecario_"+Environment.MachineName+"_"+fecha;
                var client = new RestClient(url+batch+"/"+nameBatch+"");
                var request = new RestRequest(Method.POST);
                request.AddHeader("cache-control", "no-cache");
                request.AddHeader("Authorization", "Basic "+ingreso+"");
                request.AddFile("input3.pdf", pathDocumento);
                IRestResponse response = client.Execute(request);
                var content = response.Content;
    
                string xml = content;
                XElement doc = XElement.Parse(xml);
                var codigo = doc.Descendants("HTTP_Code").First().Value;
                var id = doc.Descendants("ID").First().Value;
    }


    martes, 9 de abril de 2019 18:46
  • Hola Nicolás . Voy a borrar tanto de tu pregunta como respuesta los datos relacionados con el servicio. Estás publicando credenciales que pueden ser usadas por terceros. 

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

    miércoles, 10 de abril de 2019 18:32
    Moderador

Todas las respuestas

  • hola

    Ceo que la url la estas armand de forma dinamica en base a Environment.MachineName y una fecha, eso esta muy raro

    si pones un breakpoint en el codigo y tomas la url generada dinamicamente y la llevas a postman, puedes validar que resuelve correctamente?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 9 de abril de 2019 17:21
  • Buenas tardes Leandro,

          La URL dinamica que ingreso esta correcta y es aceptada por el web service ya que este se describe de la siguiente manera

    HOST/dcma/rest/uploadBatch/BC36/NombreInstancia

    URL web service: HOST/dcma/rest/uploadBatch/

    Proceso: BC36

    Nombre del archivo unico: NombreInstancia

    El problema es que el web service me acepta la informacion entregandome un ID especifico, pero no reconoce el archivo que deseo subir al sistema y queda en vacio


    martes, 9 de abril de 2019 18:03
  • Gracias Leandro por tu utilizando ayuda, tenia un problema en el codigo para poder subir el documento por medio de RestSharp, ahora tengo el codigo funcional y parametrizado.

    public void subirDocumento(string batch,string pathDocumento){
                string ingreso = micredencial;
                string directorio = @"C:\Documento";
                string file = "Prueba_201904091117.pdf";
                string documento = Path.Combine(directorio, file);
                
                string fecha = (DateTime.Now).ToString("yyyyMMdd_HHmmss");
                string nameBatch="Hipotecario_"+Environment.MachineName+"_"+fecha;
                var client = new RestClient(url+batch+"/"+nameBatch+"");
                var request = new RestRequest(Method.POST);
                request.AddHeader("cache-control", "no-cache");
                request.AddHeader("Authorization", "Basic "+ingreso+"");
                request.AddFile("input3.pdf", pathDocumento);
                IRestResponse response = client.Execute(request);
                var content = response.Content;
    
                string xml = content;
                XElement doc = XElement.Parse(xml);
                var codigo = doc.Descendants("HTTP_Code").First().Value;
                var id = doc.Descendants("ID").First().Value;
    }


    martes, 9 de abril de 2019 18:46
  • Hola Nicolás . Voy a borrar tanto de tu pregunta como respuesta los datos relacionados con el servicio. Estás publicando credenciales que pueden ser usadas por terceros. 

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

    miércoles, 10 de abril de 2019 18:32
    Moderador