如何在Postman中发送XML字符串作为请求体适配[FromBody]string参数接口
问题根因
WebAPI的[FromBody]参数绑定逻辑会根据请求的Content-Type选择对应格式化器反序列化内容:当Content-Type为application/xml时,XML格式化器会尝试将XML结构映射到参数的CLR类型,string类型没有对应的XML根节点匹配,因此绑定结果始终为null。
方案1:仅调整Postman配置(无需修改后端代码)
如果你不想改动现有接口代码,按如下步骤配置Postman即可:
- 请求头设置:将
Content-Type的值改为application/json - 请求体设置:选择
raw格式,将你需要提交的完整XML内容用英文双引号包裹,XML内容内部的双引号统一转义为\",示例请求体如下:
"<root><orderId>123</orderId><content>测试申请</content></root>"
点击发送后,后端string类型的application参数就能正常接收到完整XML字符串。
方案2:修改后端代码适配原生XML提交
如果希望保持Content-Type: application/xml的提交规范,推荐使用以下两种改法:
改法1:调整参数类型为XElement
直接将参数改为XElement,格式化器可以正常绑定XML内容,调用ToString()即可拿到完整XML字符串:
[HttpPost] [Route("whatever")] public async Task<IHttpActionResult> Apply([FromBody]XElement application) { string xmlStr = application.ToString(); // 你的业务逻辑 }
改法2:直接读取原始请求体
跳过模型绑定逻辑,直接读取请求的原始内容,不受Content-Type限制:
[HttpPost] [Route("whatever")] public async Task<IHttpActionResult> Apply() { string application = await Request.Content.ReadAsStringAsync(); // 你的业务逻辑 }
内容的提问来源于stack exchange,提问作者developer9969
相关产品推荐
相关产品推荐

