繁体   English   中英

来自ASP.NET MVC中的请求主体的XML反序列化

[英]XML deserialization from request body in ASP.NET MVC

我正在尝试设置一个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#,因此在翻译中可能会丢失一些内容。 在这一点上,我很难理解为什么这么难做到。

问题是因为我的控制器是System.Web.Mvc.Controller类型,而不是System.Web.Http.ApiController类型。 MVC控制器不具有WebAPI控制器所具有的反序列化功能,因此期望JSON数据或HTML表单数据作为有效负载。 将控制器的类更改为System.Web.Http.ApiController它开始工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM