【发布时间】:2018-04-24 17:15:05
【问题描述】:
我正在尝试设置一个 MVC 应用程序,该应用程序具有一个在请求正文中接受 XML 的端点,然后对其进行处理。我已经对此进行了简化以尝试缩小问题范围,所以这是我的模型:
Public Class MyModel
Public Property Value1 As String
Public Property Value2 As String
End Class
我的控制器中有这个设置:
<HttpPost()> _
Public Function Launch(<FromBody()> ByVal myModel As MyModel) As ActionResult
' ...
' myModel is always a new object but with null properties
' ...
End Function
这是我发送的 HTTP 请求:
POST /launch HTTP/1.1
Host: example.com
Accept: application/xml
Content-Type: application/xml
<MyModel>
<Value1>1</Value1>
<Value2>2</Value2>
</MyModel>
当我调试时,它会到达正确的端点,但 myModel 始终为空。空我的意思是对象已经被实例化,但它的所有属性都是null。
我已经在 stackoverflow 上搜索了所有答案,但没有任何效果。我在Global.asax 代码中添加了config.Formatters.XmlFormatter.UseXmlSerializer = True,但这似乎不起作用。我还添加了一个自定义 XmlMediaTypeFormatter,它忽略了似乎也没有任何作用的 xml 命名空间。
有什么明显我遗漏的东西吗?我知道我使用的是 VB.NET,而且我看到的所有示例都是 C#,所以可能在翻译中丢失了一些东西。在这一点上,我很难理解为什么这很难做到。
【问题讨论】:
-
嗯...也许您在 XML 帖子中缺少数据协定/xmls 属性?
<MyModel xmlns="http://schemas.datacontract.org/2004/07/AppName.NameSpaceName"> ... </MyModel> -
刚刚找到了这个可靠的 SO 答案——我认为提供的选项可能值得一试:stackoverflow.com/a/14069824/7902641
-
@TylerCrawford 是的,在我发布我的问题之前,我遇到了这个答案。我已经尝试了所有这些选项,但都没有奏效:\
-
我的一个建议是使用“网络嗅探器”程序(例如 Fiddler)检查您传输的实际内容。你的“身体”很可能是错误的。 更新:只有当您的客户端是浏览器时,Fiddler 才能做到这一点。否则你需要更复杂的东西,比如 Wireshark。
-
@johannes.colmsee 我正在使用 Postman 发送请求,所以我确切地知道正文中的内容。我还仔细检查了 Fiddler,它看起来是正确的。
标签: c# xml asp.net-mvc vb.net