Http Post XML-файл на внешний URL-адрес, а затем получить ответ - PullRequest
1 голос
/ 11 июня 2019

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

Я создал свой xml-файл как XDocument и хотел бы отправить его на сторонний URL-адрес с помощью http post

Затем я должен получить ответ от URL-адреса, содержащего другой XML-документ.

  1. Что такое команда для первоначальной отправки XDocument.
  2. Создать ли новое действие контроллера с тем же именем, но с фильтром [HTTPPOST] для получения ответа?
  3. Должны ли параметры ответа принимать тип данных XDocument для получения возвращенного XML-документа?

Если я не на правильном пути, пожалуйста, дайте мне знать.

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Попробуйте отправить содержимое XML в теле запроса.

Передать строку XML в параметре xmlData

    private object ProcessResponse(string xmlData)
    {
        HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(URL);
        httpWebRequest.ContentType = "application/xml";
        httpWebRequest.Method = "POST";

        object result = null;
        if (!string.IsNullOrEmpty(xmlData))
        {
            byte[] data = Encoding.UTF8.GetBytes(xmlData);

            using (var stream = httpWebRequest.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }
        }

        HttpWebResponse httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

        using (StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            result = JsonConvert.DeserializeObject(streamReader.ReadToEnd());
        }
        return result;
    }
0 голосов
/ 11 июня 2019
  1. Если у вас уже есть XDocument - вы можете вызвать .ToString(), который даст вам строку XML для использования в качестве тела запроса POST.

  2. Вы можете использовать HttpClient, чтобы сделать запрос HTTP POST и обработать ответ (см. Пример).

  3. Не знаете, что вы здесь имеете в виду?

Пример адаптирован из https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient?view=netframework-4.8:

XDocument xDocument = XDocument.Parse("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<note>\r\n  <to>Tove</to>\r\n  <from>Jani</from>\r\n  <heading>Reminder</heading>\r\n  <body>Don't forget me this weekend!</body>\r\n</note>");

string xmlRequestBody = xDocument.ToString();

// Create a New HttpClient object and dispose it when done, so the app doesn't leak resources
using (HttpClient client = new HttpClient())
{
    // Call asynchronous network methods in a try/catch block to handle exceptions
    try 
    {
        HttpResponseMessage response = await client.PostAsync("your_external_url", new StringContent(xmlRequestBody, Encoding.UTF8, "text/xml")));

        response.EnsureSuccessStatusCode();

        // responseBody will contain the response XML document (hopefully!)
        string responseBody = await response.Content.ReadAsStringAsync();

        // parse the string into an XDocument
        XDocument responseDocument = XDocument.Parse(responseBody);

        Console.WriteLine(responseBody);
    }  
    catch (HttpRequestException e)
    {
        Console.WriteLine("\nException Caught!");   
        Console.WriteLine("Message :{0} ",e.Message);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...