xml данные POST из файла

Я пытаюсь отправить XML-данные из файла в датчик, что должно получить XML и сделать из этого значения. У меня есть этот код, но я не знаю, работает ли он на самом деле.

У меня есть ответ от сервера, но действительно ли он получает эти данные из xml-файла? Я все еще новичок, поэтому я до сих пор не знаю.

Спасибо за любую помощь..

class Program
{
    static void Main(string[] args)
    {


        WebRequest request = WebRequest.Create("http://192.168.254.20:5050/token");
        request.Method = "POST";

        string postData = @"C:UserslvrabelDesktopCrajsonsfinalsOutput.xml";
        byte[] byteArray = Encoding.UTF8.GetBytes(postData);

        request.ContentType = "application/xml";
        request.ContentLength = byteArray.Length;
        Stream dataStream = request.GetRequestStream();
        dataStream.Write(byteArray, 0, byteArray.Length);
        dataStream.Close();
        WebResponse response = request.GetResponse();
        Console.WriteLine(((HttpWebResponse)response).StatusDescription);
        dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);

        string responseFromServer = reader.ReadToEnd();

        Console.WriteLine(responseFromServer);
        Console.WriteLine(postData);
        Console.ReadKey();

        reader.Close();
        dataStream.Close();
        response.Close();
    }
}

Всего 2 ответа


Вам нужно прочитать ваш xml-файл, затем вы можете преобразовать его в байты, а затем вы можете отправить его на сервер.

byte[] xmlData= File.ReadAllBytes(@"C:UserslvrabelDesktopCrajsonsfinalsOutput.xml");

Это другой подход:

var xmlFile = @"C:UserslvrabelDesktopCrajsonsfinalsOutput.xml";
var client = new HttpClient { BaseAddress = new Uri("http://192.168.254.20:5050/")};

using(var content = new StringContent(File.ReadAllText(xmlFile), Encoding.UTF8, "text/xml"))
{
    var result = await client.PostAsync("token", content);

    var respnseText = await result.Content.ReadAsStringAsync(); 
}

(Примечание: если вы получаете доступ к одной и той же конечной точке службы с одинаковыми настройками несколько раз, вы можете повторно использовать экземпляр HttpClient для вызова различных методов обслуживания даже по потокам. Вот почему я не завернул его в предложение using )

Если у вас возникли трудности с общением с сервисом, у вас могут возникнуть другие проблемы. Если вы не получите исключение, вы можете проверить свойства результата, чтобы узнать, вернула ли конечная точка службы (OK = 200) или какой-либо другой код результата. Вы можете найти подробности об этом. Вы также можете просто воспроизвести этот код в html + javascript, там вы можете более легко просмотреть трафик в браузере. Конечно, вы можете использовать сетевой сниффер, но это может быть намного сложнее.

[Обновить] Если вам действительно нужно передать имя файла как параметр GET, используйте следующее:

var xmlFile = @"C:UserslvrabelDesktopCrajsonsfinalsOutput.xml";

var uri = new Uri($"http://192.168.254.20:5050/token?content={xmlFile}", UriKind.Absolute);
using (var client = new HttpClient())
{
    var result = await client.GetAsync(uri);

    var respnseText = await result.Content.ReadAsStringAsync(); 
}

Есть идеи?

10000