Программно отправлять данные XML на ресурс и сериализовать результат - PullRequest
0 голосов
/ 12 июля 2011

Я пытаюсь работать с относительно новым API стороннего поставщика. Основное использование - это отправка запроса в формате xml. Таким образом, теоретически POST URI будет выглядеть так:

http://provideraddress.com/?xml=myxml

В свою очередь, я должен получить ответ в формате xml.

Это было какое-то время, поэтому я изо всех сил пытаюсь найти лучший способ сделать это (на самом деле, меня не волнует "лучшее", и я согласился бы просто заставить вещь работать).

До сих пор я пытался использовать WebClient, а также WebRequest. Последняя попытка использует последнюю, после того как данные xml были собраны вручную в виде строки. Я попытался добавить параметр "xml" в URI, а также записать его в StreamWriter. Во-первых, я получаю какой-то объект WebResponse обратно, но длина содержимого всегда равна -1, а тип содержимого отображается как text / html, ни один из которых не кажется подходящим. Во-вторых, я не уверен, как бы я проанализировал WebResponse или сериализовал его содержимое в мой граф объектов.

Я немного погуглил, и примеры ошибочны или устарели. Я не хочу иметь дело с записью файловой системы. В идеале я мог бы заполнить свой собственный граф объекта запроса, сериализовать его в xml, отправить POST и получить что-то, что можно сериализовать обратно в мой граф объекта ответа.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 13 июля 2011

Проще всего было бы использовать WebClient:

class Program
{
    static void Main()
    {
        using (var client = new WebClient())
        {
            client.Headers[HttpRequestHeader.ContentType] = "text/xml";
            string xml = @"<foo><bar>baz</bar></foo>";
            string url = "http://provideraddress.com/?xml=myxml";
            string response = client.UploadString(url, xml);
            Console.WriteLine(response);
        }
    }
}

Теперь, что касается генерации строки запроса, вы можете использовать один из многих методов, доступных в .NET: XDocument , XmlWriter , XmlDocument (этот начинает стареть, вам, вероятно, следует предпочесть XDocument) или сериализовать граф объекта в строку, используя XmlSerializer , ..То же самое для ответа XML => вы можете проанализировать его с помощью XDocument, XmlReader, XmlDocument или десериализовать его обратно в граф объектов с помощью XmlSerializer.

Теперь, если сервер отвечает с типом содержимого text/html и возвращает вас нетответ, вероятно, из-за того, что отправленный вами XML-файл был не в том формате, который ожидал сервер, вы не предоставили какой-либо заголовок HTTP-запроса, ожидаемый сервером, сервер столкнулся с некоторой ошибкой при обработке вашего запроса ... Прочитайте документациюСторонний API и убедитесь, что вы уважаете его формат.Есть некоторые API, которые могут потребовать аутентификации в первую очередь.Чтобы вам нужно было отправить запрос на какой-либо URL с именем пользователя и паролем, и, если аутентификация прошла успешно, сервер отправит вам обратно токен или файл cookie, который вы должны отправить на все последующие запросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...