4

我有 MVC4 WebApi 项目,该项目在我的开发机器上运行良好,但在已部署的服务器上运行异常。两个盒子都是带有 IIS 7.5 的 Server 2008

我有一个带有单个 Post 方法的控制器,该方法将复杂类型作为参数。我强行使用XmlMediaType格式化程序等XmlSerializationHttpConfiguration.Formatters.XmlFormatter.UseXmlSerializer = true复杂类型是“老派” XmlSerializable

对于相同的请求,我的开发框正确地将正文中的 XML 反序列化为复杂类型的实例,并且从该Post方法返回给客户端的结果是正确的。在另一台机器上,参数实例null到达Post方法中。

我必须重申,这是相同的代码和相同的请求(主机名除外)。这让我认为机器之间的环境必须有所不同。不幸的是,经过大量搜索,我仍然不知道那可能是什么。

我还应该指出,如果我修改我的Post方法以采用字符串参数,然后自己在内部进行反序列化,那么两个盒子上的行为是相同且正确的。

我还实现了一个自定义序列化程序(XmlFormatter.SetSerializer),并且开发框再次工作;另一个产生一个null参数。有趣的是,在这种情况下,当我在反序列化之前记录请求的主体时,我在两台机器上看到了相同的 XML。只是一个盒子在通往方法的途中将反序列化的值丢弃在某处Post

任何人都可以就如何继续解决这种奇怪的行为提供一些建议吗?

4

1 回答 1

2

检查控制器上的 ModelState。如果反序列化由于任何原因失败,它会被记录为 ModelState 异常。它至少可以帮助你弄清楚发生了什么。

于 2012-11-08T21:54:19.447 回答