Asp.net mvc ASP.NET MVC4 WebApi参数为空-仅在一台计算机上

Asp.net mvc ASP.NET MVC4 WebApi参数为空-仅在一台计算机上,asp.net-mvc,asp.net-mvc-4,asp.net-web-api,Asp.net Mvc,Asp.net Mvc 4,Asp.net Web Api,我有一个MVC4WebAPI项目,它在我的开发机器上运行良好,但正在运行 奇怪的是,在部署的服务器上。这两个框都是带有IIS 7.5的Server 2008 我有一个控制器和一个Post方法,该方法将复杂类型作为 参数。我正在强制使用XmlMediaType格式化程序和XmlSerializationso HttpConfiguration.Formatters.XmlFormatter.UseXmlSerializer=true,复杂类型为“old school”XmlSerializable

我有一个MVC4WebAPI项目,它在我的开发机器上运行良好,但正在运行 奇怪的是,在部署的服务器上。这两个框都是带有IIS 7.5的Server 2008

我有一个控制器和一个Post方法,该方法将复杂类型作为 参数。我正在强制使用
XmlMediaType
格式化程序和
XmlSerialization
so
HttpConfiguration.Formatters.XmlFormatter.UseXmlSerializer=true
,复杂类型为“old school”
XmlSerializable

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

我必须重申,这是相同的代码和相同的请求(除了 用于主机名)。这让我觉得一定有环保的东西 不同的机器。不幸的是,经过多次搜索,我仍然不知道那可能是什么

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

我还实现了一个自定义序列化程序(
XmlFormatter.SetSerializer
)并再次实现 开发盒工作;另一个生成一个
null
参数。有趣的是,当我登录 反序列化之前的请求主体在本例中,我在两台机器上看到相同的XML。只是有一个框将反序列化的值放在通往
Post
方法的某个地方

有人能就如何继续解决这个奇怪的问题提供一些建议吗
行为

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

谢谢你,这确实有帮助。ModelState显示了不工作的服务器抱怨发布的xml的格式——“xml文档(1,14)中有一个错误”。有趣的是,根节点有13个字符长,所以“坏”的就在后面。即使我去掉了所有的空格,第一个子节点就是下一个节点,我仍然会抱怨。同样,即使在wireshark级别,同样的请求也可以在我的开发机器上运行。关于为什么不同机器之间的xml解析会不同,还有其他想法吗?您是否在两台机器上运行相同版本的框架?对在相同版本的框架和相同操作系统上运行相同代码的服务器的相同请求应该具有相同的行为。我和你一样被难住了。这个问题很有观察力!我忽略了这个解决方案包含MS可移植类型库项目的细节。对于VS2010,PTL是一个外接程序,而服务器没有VS2010,该外接程序需要一个框架更新(),以使它们像VS2010和该外接程序一样工作。这是一个漫长而痛苦的过程,最终达到了这一点,但更新解决了我的问题。谢谢你让我走上正轨!谢谢你,非常有帮助!