将XML发布到Web API方法始终为null

时间:2014-09-18 16:16:52

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

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

“消息通过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消息没有映射到我的班级。

1 个答案:

答案 0 :(得分: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