Могу ли я передать нестроковый сервис WCF RESTful с помощью UriTemplate? - PullRequest
69 голосов
/ 13 февраля 2009

Могу ли я сделать следующее?

[OperationContract]
[WebGet(UriTemplate = "/foo/{id}")]
string GetFoo(int id);

Я бы хотел, чтобы мой сервис функционировал как сервис RESTful и сервис SOAP в стиле RPC. Если возможно, я бы хотел сохранить int как int, а не делать синтаксический анализ вручную.

Ответы [ 4 ]

75 голосов
/ 05 мая 2009

Как упоминалось в dthrasher, переместите id в часть запроса URI. Это сработало для меня:

[OperationContract]
[WebGet(UriTemplate = "/foo?id={id}")]
string GetFoo(int id);

См. "Схема URI" в Википедии для получения дополнительной информации о различных частях URI: http://en.wikipedia.org/wiki/URI_scheme

68 голосов
/ 18 февраля 2009

Если я правильно помню, переменные UriTemplate в пути всегда разрешаются в строки при использовании WebGet или WebInvoke. Переменные UriTemplate можно связывать только с int, long и т. Д., Когда они находятся в части запроса UriTemplate.

4 голосов
/ 22 мая 2013

Как уже упоминалось, вы должны использовать строки запроса для передачи нестроковых параметров. В следующей статье подробно описывается, как выполняется синтаксический анализ.

Расширяемость WCF - QueryStringConverter

Возвращаясь к «правильному» Расширение WCF, пост этой недели о QueryStringConverter. Это на самом деле простая тема, которая должна быть рассмотрена, так как ее цель довольно специфические (в отличие от других точек растяжимости, замеченных ранее, которые могли бы использоваться в самых разных случаях) - в рамках WCF QueryStringConverter используется только на конечных точках, которые имеют WebHttpBehavior применяется к ним. И даже в тех, только на операциях которые имеют параметры, переданные через строки запроса (любые операции с параметрами, помеченными с помощью [WebGet] или [WebInvoke] с UriTemplate, который явно привязывает некоторые параметры к запросу строка). QueryStringConverter - это часть, которая может конвертировать между параметры операции и их представление в строке запроса.

...

QueryStringConverter по умолчанию, используемый WebHttpBehavior, поддерживает изначально несколько типов, включая все простые числовые типы (байт, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, одноместный, двойной, Десятичное число), логическое значение, символ, объект, строка, дата и время, дата и время, TimeSpan, Guid, Uri и массивы байтов (по существу, все типы который DataContractSerializer считает «примитивами», с исключение XmlQualifiedName). Типы перечисления также поддерживается по умолчанию (строковое представление значений перечисления используемый). Наконец, есть еще один набор типов, которые поддерживаются по умолчанию QueryStringConverter - любой, который объявляет Атрибут [TypeConverter] с преобразователем типов, который может преобразовывать введите в и из строк (подробнее об этом ниже).

3 голосов
/ 13 февраля 2009

К сожалению, вы должны выполнить синтаксический анализ самостоятельно, если хотите использовать UriTemplate.

...