2016-09-21 2 views
1

В настоящее время у меня есть API, который получает тип объекта, как показано ниже.Изменение Web Api 2 Способ отправки для принятия измененного тела

public HttpResponseMessage Post(Job job) {} 

При получении прямой (или частичный) объект, который соответствует Job типа все работает, как ожидалось. Проблема в том, что мы модифицируем объект JSON, чтобы включить в тело больше информации, которая мешает сериализатору узнать, как справиться с этим. Наш новый запрос выглядит следующим образом.

{ 
    "httpHeaders":{ 
    }, 
    "payload":{ 
    } 
} 

«Старый» объект, который мы получили, теперь находится в «полезной нагрузке». Нужно ли переопределять метод, возможно, Media Formatter?

Благодаря

ответ

4

Создание типа, который содержит тип работы в качестве свойства под названием Payload с другой собственности, названный HttpHeaders, который содержит ожидаемую структуру модели. Я не знаю, почему вы отправляете заголовки Http в тело полезной нагрузки.

Связывание модели попытается сопоставить структуру тела запроса с структурой ожидаемой модели. В этом случае вы собираетесь ожидать типа Job, чтобы принять тип, содержащий Job. Таким образом, вы бы создали супер-тип:

public class InputModel { 
    public Job Payload {get;set;} 
    public HeaderType HttpHeaders {get;set;} 
} 

Затем привязка модели ASP.NET будет заполнять объекты соответствующим образом.

+0

Я предположил, что это так, поэтому мне придется сопоставить полезную нагрузку с моей моделью работы вручную или я могу просто использовать десериализатор в данный момент в методе? – McArthey

+0

Если объект полезной нагрузки совпадает с вашей моделью работы, то все, что вам нужно сделать, это имя свойства «Полезная нагрузка» и иметь тип Job. Если объект полезной нагрузки не соответствует модели задания, вам необходимо будет предоставить информацию о сериализации, чтобы отображение могло происходить во время привязки модели. –

+0

Отлично. Большое спасибо. В стороне это проходит через очередь сообщений, поэтому странный формат. Он изменяется для удаленных вызовов API. – McArthey