[来自身体]。 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)
{
}
结果:
我是 .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)
{
}
结果: