[来自身体]。 Post 控制器中的参数值始终为 NULL

[FromBody]. Param value in Post Controller is always NULL

我是 .net 网络应用程序的新手。我的用例是使用 XML 作为 body 进行 post 调用。我正在尝试通过 postman 进行调用,但我的控制器中收到的参数值始终为空。以下是我的东西:

他是我的XMLbody:

  <?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 object:

[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");
    }
}

这就是我从 postman 那里调用它的方式:

我在调试模式下注意到的另一件事是我也看到了这些错误:

有人可以帮忙吗?我尝试了各种解决方案,但无法使其发挥作用。提前致谢。

您需要添加 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>

您的 Action 需要将 Document 更改为 ABC :

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

结果: