【问题标题】:Posting XML to a WebAPI method always null将 XML 发布到 WebAPI 方法始终为空
【发布时间】:2014-09-18 16:16:52
【问题描述】:

我正在执行系统集成。客户文档说明

“发送消息时,HTTP CONTENT_TYPE 标头设置为“application/x-www-form-urlencoded”。

<Message>
  <Originator>ACME Solutions</Originator>
  <Payload>
     ...message xml content goes here...
  </Payload>
</Message>

我正在使用 WebApi 2,并且 post 的默认控制器操作具有以下定义

public void Post([FromBody]string value)

每次我将此消息发布到我的网络服务时,收到的值始终为空

我尝试创建一个具有相同定义但属性始终为 null 的类。

public void Post([FromBody]Message value)

如果我将定义更改为更通用的定义,我可以从请求内容中提取 Xml 文档,但这不是我想要的方式,因为它使单元测试变得困难。

public void Post(HttpRequestMessage request)

任何人都可以建议我哪里出错以及为什么 xml 消息没有映射到我的班级。

【问题讨论】:

  • 您是将 XML 原始文件发布到正文中还是对其进行编码(如您的标题所示)?
  • 谢谢。这太明显了,我错过了。请张贴作为答案,我会接受

标签: c# xml asp.net-web-api


【解决方案1】:

当您将内容类型设置为application/x-www-form-urlencoded 时,您还需要对正文进行编码以匹配。所以身体不是这样的:

<Message><Originator>ACME Solutions</Originator><Payload>message</Payload></Message>

看起来像这样:

value=%3CMessage%3E%3COriginator%3EACME+Solutions%3C%2FOriginator%3E%3CPayload%3Emessage%3C%2FPayload%3E%3C%2FMessage%3E

【讨论】:

  • 非常感谢。我在 Chrome 中使用休息客户端来模拟帖子,只需要使用编码选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-05
  • 2013-01-12
相关资源
最近更新 更多