我正在尝试设置一个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
。
我到处都在寻找答案,但什么也没有成功。我在config.Formatters.XmlFormatter.UseXmlSerializer = True
代码中添加了Global.asax
,但这似乎行不通。我还添加了一个自定义XmlMediaTypeFormatter
,它忽略了xml空间,这似乎也不起任何作用。
我错过了什么明显的东西吗?我知道我正在使用VB.NET,我看到的所有例子都是C#,所以在翻译过程中可能丢失了一些东西。在这一点上,我很难理解为什么这很难做到。
发布于 2018-04-26 05:15:55
问题在于我的控制器是System.Web.Mvc.Controller
类型的,而不是System.Web.Http.ApiController
类型的。MVC控制器不具有与WebAPI控制器相同的反序列化能力,因此期望JSON数据或HTML数据作为有效负载。在将控制器的类更改为System.Web.Http.ApiController
之后,它工作了。
https://stackoverflow.com/questions/50007455
复制