Десериализация XML из тела запроса в ASP.NET MVC - PullRequest
0 голосов
/ 24 апреля 2018

Я пытаюсь настроить приложение 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 #, так что, возможно, что-то было потеряно в переводе. На данный момент мне трудно понять, почему это так трудно сделать.

1 Ответ

0 голосов
/ 26 апреля 2018

Проблема в том, что мой контроллер был типа System.Web.Mvc.Controller, а не System.Web.Http.ApiController.Контроллеры MVC не обладают теми же возможностями десериализации, которые имеют контроллеры WebAPI, и, следовательно, ожидают данные JSON или данные формы HTML в качестве полезной нагрузки.После изменения класса контроллера на System.Web.Http.ApiController все заработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...