如何从aspnet中的请求体读取原始xml

2024-01-05

我需要我的HttpController接收原始 XML 并将其传递给遗留代码。我试试这个:

[HttpPost]
[Route("/xml")]
public string Post([FromForm] XDocument xml)
{
    return xml.ToString();
}

但是,那xml文档似乎总是空的,例如,

$ curl -k -X POST https://localhost:5001/xml -d '<foo>bar</foo>' -i
HTTP/1.1 200 OK
Date: Fri, 26 Feb 2021 10:19:23 GMT
Content-Type: text/plain; charset=utf-8
Server: Kestrel
Content-Length: 0

$

如何从请求正文中读取原始 XML 并获取有效的 XDocument?


首先,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" 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从aspnet中的请求体读取原始xml 的相关文章

随机推荐

  • 如何使用Django自定义管理命令选项?

    Django 文档通过示例告诉我如何向我的 django 自定义管理命令添加选项 from optparse import make option class Command BaseCommand option list BaseComm
  • 将 numpy 数组转换为 pandas 数据框

    我有一个大小为 numpy 的数组31x36我想转换成 pandas 数据框来处理它 我正在尝试使用以下代码对其进行转换 pd DataFrame data matrix index np array range 1 31 columns
  • 如何在ejs中使用if语句?

    我有一个页面 它创建一个 foreach 并显示一些像这样的照片 img src 我想做一个 if 语句 因为如果没有要显示的照片会给出如下消息 没有上传照片 像这样的事情 img src
  • beautifulsoup 4:分段错误(核心转储)

    我爬取了以下页面 http www nasa gov topics earth features plains tornadoes 20120417 html http www nasa gov topics earth features
  • 修复 Nvidia 和 AMD 的 GLSL 着色器

    我在让 GLSL 着色器在 AMD 和 Nvidia 硬件上工作时遇到问题 我并不是在寻求修复特定着色器的帮助 而是寻求如何避免出现这些问题 是否可以检查着色器是否可以在 AMD Nvidia 驱动程序上编译 而无需在具有相应硬件的计算机上
  • 如何从实例方法内部调用 Shoes 方法?

    我正在尝试扩展我已经编写的 Ruby 应用程序以使用 Shoes 我已经编写了一个类 并且希望能够在该类中使用 GUI 也就是说 我希望我的班级有这样的内容 class MyClass def draw draw something usi
  • bbmle 出现 NaN 错误

    这个问题与我之前的问题有关here https stackoverflow com questions 54879274 data fitting by the method of maximum likelihood for a new
  • xpath - 使用包含和通配符

    我有以下内容 并试图看看是否有更好的方法 我知道可以使用starts with contains 来完成 我正在使用 firefox 10 进行测试 我相信它实现了 xpath 2 测试节点是 a a a 有没有办法使用通配符来获取 foo
  • 在Python的imp中,“ImportError:没有名为...的冻结子模块”

    我正在尝试编写一个脚本 在目录中搜索具有给定名称的模块 我想使用find modulePython的方法imp https docs python org 2 library imp html 但是 我不太明白为什么以下不起作用 我位于包含
  • Resharper 重命名字段

    我的任务是对未使用我们当前的代码风格约定编写的遗留代码库进行一些重大修改 这些更改足够广泛 以至于我在开始之前进行了一些清理和重构 有相当多的死代码 困扰我的一件事是字段遵循 m FieldName 命名约定 而我们现在使用 fieldNa
  • 如何使用自定义 boost::log 格式化程序输出 TimeStamp 和 ThreadID 属性?

    我正在使用自定义提升 日志 http www boost org doc libs 1 61 0 libs log doc html index html用于对输出日志消息进行颜色编码的格式化程序 但我无法找到添加的正确方法时间戳 and
  • 日期验证的正则表达式帮助 - dd/mm/yyyy - PHP [重复]

    这个问题在这里已经有答案了 有人可以告诉我我的方法在这个正则表达式方面的错误吗 if preg match 0 9 1 2 0 9 1 2 0 9 4 POST date 0 echo error 基本上我希望每次都显示错误消息 除非格式正
  • 填充数据表时,datareader 比 dataset 更快吗?

    哪个会更快 1 循环数据读取器并创建基于填充数据表的自定义行和列 2 或者创建一个 dataAdapter 对象并只是 Fill 一个数据表 在动态创建数据表时 数据读取器的性能是否仍然有效 DataAdapter 在底层使用 DataRe
  • 使用 D3 时 IE11 不接受 SVG 高度和宽度

    我正在使用以下内容来设置响应式 SVG outerHeight 400 outerWidth 600 var margin top 20 right 20 bottom 30 left 40 width outerWidth margin
  • Vue 组件 props 的默认值以及如何检查用户是否未设置该 prop?

    1 如何在 Vue 2 中设置组件 prop 的默认值 例如 有一个简单的movies可以这样使用的组件
  • 为什么在 Firefox 中 document.body == null 而在 Safari 中却不然

    我尝试访问的页面出现问题colorbox http colorpowered com colorbox 一种 jQuery 的灯箱 工作 它显然不起作用 因为document body being null在 FireFox 3 5 3 中
  • Java 排序函数

    在java中 collections sort使用合并排序算法而不是快速排序 但Arrays sort使用快速排序 我不确定上述事实 但我在互联网上发现了这一点 例如在网站上代码牧场 http www coderanch com t 520
  • 设置显示方向失败

    我正在我的应用程序中打开前置摄像头 第一次应用程序运行正常 但是当我再次运行应用程序第二次 第三次或第四次时 它给了我异常java lang RuntimeException set display orientation failed 请
  • 大数据地理热图(google)

    我想绘制一个heat map in 谷歌地图显示出租车乘车分布一个城市的 我绕过去了4000条数据乘坐出租车的起始位置 纬度和经度 这是我的一些脚本 首先我设置了谷歌地图 var hongkong new google maps LatLn
  • 如何从aspnet中的请求体读取原始xml

    我需要我的HttpController接收原始 XML 并将其传递给遗留代码 我试试这个 HttpPost Route xml public string Post FromForm XDocument xml return xml ToS