Как моделировать привязку XML POST с несколькими дочерними узлами в WebAPI (.net core 3) - PullRequest
0 голосов
/ 17 октября 2019

Я создаю новый WebAPI в .NET core 3, который должен использовать размещенные в нем XML-данные. Я могу связать модель документа XML с одним дочерним элементом, однако я не могу связать модель несколькими экземплярами одного и того же дочернего элемента (эквивалентно привязке модели JSON с помощью List или IEnumerable)

Приложение работает под управлением .NET Core 3 версии3.0.100. Я пытался использовать List и IEnumerable безрезультатно. В XML-документе я пробовал несколько вариантов, включая отправку нескольких XML-документов в одном и том же почтовом запросе.

Мой контроллер:

[ApiController]
    [Route("[controller]")]
    public class RenewalNoticeJobController : ControllerBase
    {
        [Consumes("application/xml")]
        [Produces("application/xml")]
        [HttpPost("Test")]
        public IActionResult Test([FromBody] IEnumerable<TestDTO> model)
        {
            return Ok(model);
        }
    }

Мой DTO / Модель:

public class TestDTO
    {
        public string TestValue {get;set;}
    }

Мои данные XML, отправленные через POSTman

<TestDTO xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <TestValue>TestValue 1</TestValue>
    <TestValue>TestValue 2</TestValue>
</TestDTO>

Сообщение об ошибке, которое я получаю при использовании IEnumerable:

<problem xmlns="urn:ietf:rfc:7807">
    <status>415</status>
    <title>Unsupported Media Type</title>
    <type>https://tools.ietf.org/html/rfc7231#section-6.5.13</type>
    <traceId>|1a4dfac4-4f43b1e42224c38a.</traceId>
</problem>

И при использовании List:

<problem xmlns="urn:ietf:rfc:7807">
    <status>400</status>
    <title>One or more validation errors occurred.</title>
    <type>https://tools.ietf.org/html/rfc7231#section-6.5.1</type>
    <traceId>|d6416e-497079dbab2aeefc.</traceId>
    <MVC-Errors>
        <MVC-Empty>An error occurred while deserializing input data.</MVC-Empty>
    </MVC-Errors>
</problem>

Обновление: Я обновил вопрос, чтобы быть более понятным. То, что я пытаюсь привязать к модели один или несколько экземпляров модели TestDTO (эквивалентно IEnumerable или List.

1 Ответ

0 голосов
/ 18 октября 2019

Есть две проблемы: одна - вам нужно добавить XML-форматер, а другая - ваш XML и модель не синхронизированы.

Попробуйте выполнить следующие действия:

  1. Startup.cs

    services.AddMvc().AddJsonOptions().AddXmlSerializerFormatters();
    
  2. Модель

    public class TestDTO
    {
            public string[] TestValue { get; set; }
    }
    
  3. Действие

    [Consumes("application/xml")]
    [Produces("application/xml")]
    [HttpPost("Test")]
    public IActionResult Test([FromBody] TestDTO model)
    {
        return Ok(model);
    }
    
  4. Запрос

    <TestDTO xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <TestValue>
                    <string>T1</string>
                    <string>T</string>
            </TestValue>
    </TestDTO>
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...