2012-01-27 1 views
0

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

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

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

Какой сбой при запуске:

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

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

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

ответ

0

Вы должны иметь параметр/тип возвращаемого типа Примечание и ваши форматтеры будет (де -) сериализуйте его в/из требуемого представления.

0

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

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