首先,ASP.NET Core 默认不支持 XML 序列化/反序列化。您必须明确启用:
services.AddControllersWithViews().AddXmlSerializerFormatters();
然后,要将原始 XML 格式数据发送到 API 方法,请求的content-Type
应该application/xml
,我们将从请求体中收到xml内容,所以我们应该使用[FromBody]
属性,我们应该使用XElement
接收xml内容。请参考以下示例:
使用以下代码创建 Values API:
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// POST api/<ValuesController>
[HttpPost]
[Route("/xml")]
public string Post([FromBody]XElement xml)
{
return "Hello" + xml.ToString();
}
然后使用Postman调用这个API:
此外,您还可以根据XML元素创建模型,然后使用模型类来接收XML内容。检查以下示例:
XML内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<UserViewModel>
<Id>1</Id>
<Name>aa</Name>
</UserViewModel>
创建用户视图模型
public class UserViewModel
{
public int Id { get; set; }
public string Name { get; set; }
}
然后,在API控制器中,使用以下方法接收数据:
[HttpPost]
public string Post([FromBody]UserViewModel user)
{
return "Hello" + user.Name.ToString();
}
使用Postman来检查它:
The [FromForm]
属性将接收请求正文中的表单数据。顾名思义,表单数据用于发送您在表单中包装的数据,例如您在填写表单时输入的详细信息。这些详细信息通过将其写为核心价值对,其中键是您要发送的条目的“名称”,值是它的值。更详细的信息,您可以参考这个线程 https://stackoverflow.com/questions/51683792/how-to-get-form-data-from-postman-to-webapi.
由于您使用curl发送请求,请尝试使用-H
or --header
设置请求头,如下所示:
$ curl -k -X POST https://localhost:5001/xml -d '<foo>bar</foo>' -i -H "Content-Type: text/xml"
$ curl -k -X POST https://localhost:5001/xml -d '<foo>bar</foo>' -i -H "Content-Type:application/xml"
or
$ curl -k -X POST https://localhost:5001/xml -d '<foo>bar</foo>' -i --header "Content-Type: text/xml"
$ curl -k -X POST https://localhost:5001/xml -d '<foo>bar</foo>' -i --header "Content-Type:application/xml"