Принятие нескольких представлений для POST - PullRequest
0 голосов
/ 27 января 2012

Я быстро работаю с веб-API WCF. Я хочу выставить конечную точку, которая может принимать заметки, через метод POST. Моя проблема в том, что я хочу поддерживать несколько представлений для заметок. Например, я мог бы принять примечание, используя пользовательскую сериализацию XML, которую мы используем в другом месте, или как элемент atom:entry. У меня уже есть средства форматирования, которые могут десериализовать их в класс Note (наш собственный пользовательский класс) или как SyndicationItem.

Однако возникает вопрос, как мне определить метод? В настоящее время я получил это:

[WebInvoke(UriTemplate = GetNotesUriRoot,Method="POST")]
public HttpResponseMessage PostNote(ObjectContent item,HttpRequestMessage request)

Что не получается при запуске:

Сервисная операция 'PostNote' никогда не получит значение для входного параметра 'item' типа 'ObjectContent'. Убедитесь, что запрос HttpOperationHandler имеет выходной параметр с типом, назначаемым для «ObjectContent».

Сначала я пытался использовать два отдельных метода (с соответствующим образом заданными параметрами), но они не могут использовать одно и то же имя конечной точки. В настоящее время усилия (с использованием ObjectContent) были основаны на других постах, которые я мог найти, что предполагало, что это может быть параметром. Не существует общего базового типа или интерфейса между Note и SyndicationItem

Мы используем v0.6.0 веб-API WCF

Ответы [ 2 ]

0 голосов
/ 28 января 2012

[WebInvoke(UriTemplate = GetNotesUriRoot,Method="POST")]
public HttpResponseMessage PostNote(Note note)

тогда в вашем запросе заголовок типа контента будет определять способ десериализации объекта.Вам не нужно беспокоиться о принятии решения о том, как десериализовать, решение за вас принято, пока существует соответствующий форматтер (пока я не изучал форматеры, так как мне пока достаточно json / xml)

0 голосов
/ 27 января 2012

У вас должен быть параметр / тип возврата типа Note, и ваши средства форматирования будут (де) сериализовывать его в / из требуемого представления.

...