es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Restsharp para enviar un archivo XML a una API

Tengo una aplicación de WindowsForm ADO.NET que utilizará una llamada de método post a una API Flask y cargará un archivo XML.

Aquí está cómo llamo a la API usando Python:

import requests

API_URL = ‘http://localhost:5000’

with open(‘result.xml’) as fp:
content = fp.read()

response = requests.post(
‘{}/files/result.xml’.format(API_URL), data=content
)

He estado investigando cómo llamar a la API con el método post y cargar un archivo en C# Windows Form.

Aquí es lo que he logrado:

La función de carga:

private async Task UploadAsync(string fileName, string server)
{
var client = new RestClient(server);
var request = new RestRequest(“/files”, Method.POST);

        XmlDocument doc = new XmlDocument();

        // inicializar XMLDocument y cargar el cliente
        doc = new XmlDocument();    
        doc.Load(@""+fileName+"");
        // Actualizar (PUT) el cliente
        request = new RestRequest("/files", Method.POST);
        request.Parameters.Clear();
        request.AddParameter("text/xml;charset=utf-8", doc.InnerXml, ParameterType.RequestBody);
        IRestResponse response = client.Execute(request);
        return response;  
    }  

La llamada a la función:

private async void button2_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(label1.Text))
{
string url = “http://localhost:5000”;
IRestResponse restResponse = await UploadAsync(label1.Text,url);
if (restResponse.StatusCode == System.Net.HttpStatusCode.OK)
MessageBox.Show(“Has cargado el archivo correctamente”, “Mensaje”, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}

Hacer clic en el botón no hace nada
no hay errores y no envía el archivo.

¿Alguna idea de cómo puedo solucionar esto?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema puede estar en el tipo de parámetro del archivo que se está enviando. En el ejemplo de Python, el archivo se envía como datos binarios utilizando el parámetro data, mientras que en el código C#, se envía como text/xml.

    Intenta actualizar la línea request.AddParameter en el código C# para usar ParameterType.RequestBody en lugar de text/xml;charset=utf-8, de esta manera:

    request.AddParameter("application/xml", doc.InnerXml, ParameterType.RequestBody);
    

    También puedes intentar agregar el archivo directamente como un parámetro:

    request.AddFile("file", fileName);
    

    Asegúrate de que la ruta y el nombre de archivo sean correctos y de que el archivo exista en esa ubicación.

    Además, verifica si el servidor está en ejecución y es accesible en la URL especificada, y si hay algún problema de red o firewall que impida el envío de la solicitud. Puedes intentar utilizar una herramienta como Postman para probar por separado el punto de conexión de la API y asegurarte de que esté funcionando correctamente.

Comments are closed.