[FromBody]. Значение параметра в Post Controller всегда NULL - PullRequest
0 голосов
/ 09 июля 2020

Я новичок в. net веб-приложениях. Мой вариант использования - сделать почтовый вызов с XML в качестве тела. Я пытаюсь позвонить через почтальона, но значение параметра, полученное в моем контроллере, всегда равно нулю. Вот что у меня есть:

Он мое XML тело:

  <?xml version="1.0" encoding="utf-8"?>
  <document>
    <id>123456</id>
    <content>This is document that I posted...</content>
    <author>Michał Białecki</author>
    <links>
      <link>2345</link>
      <link>5678</link>
    </links>
  </document>

Вот объект DTO, который я использую:

[XmlRoot(ElementName = "document", Namespace = "")]
public class ABC
{
    [XmlElement(DataType = "string", ElementName = "id")]
    public string Id { get; set; }

    [XmlElement(DataType = "string", ElementName = "content")]
    public string Content { get; set; }

    [XmlElement(DataType = "string", ElementName = "author")]
    public string Author { get; set; }

    [XmlElement(ElementName = "links")]
    public LinkDto Links { get; set; }
}

public class LinkDto
{
    [XmlElement(ElementName = "link")]
    public string[] Link { get; set; }
}

Помимо это, я также добавил это в свой Startup.cs services.AddMvc().AddXmlDataContractSerializerFormatters();

И, наконец, это мой контроллер:

[Route("api/[controller]")]
public class UploadFileController : ControllerBase
{
    [HttpPost]
    [Route("upload")]
    public void RegisterDocument([FromBody] Document dto)
    {
        Console.WriteLine("Inside the controller");
    }
}

Вот как я его называю от почтальона: enter image description here

One other thing I noticed while in debugging mode is I am seeing these errors as well: введите описание изображения здесь

Может кто-нибудь поможет? Я пробовал различные решения, но не смог заставить их работать. Заранее спасибо.

1 Ответ

1 голос
/ 09 июля 2020

Вам нужно добавить AddXmlSerializerFormatters():

services.AddMvc()
    .AddXmlSerializerFormatters()
    .AddXmlDataContractSerializerFormatters();

Ваш xml должен выглядеть как показано ниже (удалить <?xml version="1.0" encoding="utf-8"?>):

<document>
    <id>123456</id>
    <content>This is document that I posted...</content>
    <author>Michał Białecki</author>
    <links>
      <link>2345</link>
      <link>5678</link>
    </links>
</document>

Необходимо изменить ваше действие Document на ABC:

[HttpPost]
public void Post([FromBody] ABC dto)
{
}

Результат: введите описание изображения здесь

...