Как передать XML в веб-API в ядре ASP.Net от почтальона - PullRequest
0 голосов
/ 03 апреля 2019

У меня ASP.Net Core 2.1 приложение и мои контроллеры API выглядят так, как показано ниже.

 [HttpPost]
    public async Task<IActionResult> Post([FromBody]XElement recurlyXml)
    {
        var node = _xmlUtil.GetFirstNode(recurlyXml);
        //do something
        return Ok();
    }

От почтальона, я вызываю этот API с полезной нагрузкой ниже.

<updated_subscription_notification>
 <subscription>
    <plan>
        <plan_code>1dpt</plan_code>
        <name>Subscription One</name>
    </plan>
    <uuid>292332928954ca62fa48048be5ac98ec</uuid>
</subscription>
</updated_subscription_notification>

enter image description here

Но при нажатии кнопки «Отправить» (попадание) выдается 400 неправильных запросов.Я также попытался добавить строку сверху внизу

<?xml version="1.0" encoding="UTF-8"?>

Но все равно 400.

Как передать XML в API-контроллер?

Спасибо!

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

ASP.NET Core по умолчанию не поддерживает сериализацию / десериализацию XML. Вы должны явно включить это:

services.AddMvc()
    .AddXmlSerializerFormatters();

@ Мейсон в комментариях по-прежнему актуален. Тип тела запроса является и должен быть практически несущественным. Вы никогда не должны связываться напрямую с чем-то вроде XElement, JObject и т. Д. Вместо этого вы создаете класс, который представляет структуру вашего XML-документа / объекта JSON, и привязываетесь к нему. То, что вы фактически связываете в своем методе действия, не имеет ничего общего с тем, что отправляют сторонние клиенты.

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

Вы получаете запрос как strem независимо, если это был XML, JSON или что-то еще.Полученные данные декодируются вами на другой стороне этого моста и преобразуются в любой объект, который вы пожелаете.То, как они отправляют это, не имеет значения, но что вы делаете с этим.

...