Могу ли я передать нестроковую службу WCF RESTful с помощью UriTemplate?
могу ли я сделать следующее?
[OperationContract]
[WebGet(UriTemplate = "/foo/{id}")]
string GetFoo(int id);
Я хотел бы, чтобы моя служба функционировала как Служба RESTful и служба SOAP в стиле RPC. Если возможно, я хотел бы сохранить int как int, а не парсинг вручную.
4 ответов
Если я правильно помню, переменные UriTemplate в пути всегда разрешаются строками при использовании WebGet или WebInvoke. Вы можете привязать переменные UriTemplate только к int,long и т. д. когда они находятся в части запроса UriTemplate.
Как упоминал dthrasher, переместите id в часть запроса URI. Это сработало для меня:
[OperationContract]
[WebGet(UriTemplate = "/foo?id={id}")]
string GetFoo(int id);
см. "схему URI" в Википедии для получения дополнительной информации о различных частях URI: http://en.wikipedia.org/wiki/URI_scheme
Как уже упоминалось, вы должны использовать строки запроса для передачи параметров без строк. В следующей статье подробно описывается, как выполняется синтаксический анализ.
расширяемость WCF-QueryStringConverter
возвращаясь к "правильной" Расширяемость WCF, сообщение на этой неделе о QueryStringConverter. Это на самом деле простая тема для обсуждения, поскольку ее цель довольно specific (в отличие от других точек расширяемости, виденных ранее, которые могут использоваться для самых разных случаев) - в WCF в QueryStringConverter используется только на конечных точках, которые имеют WebHttpBehavior применяется к ним. И даже в тех, только на операциях которые имеют параметры, переданные через строки запроса (либо операции с параметрами, отмеченными операцией [WebGet] или [WebInvoke] с UriTemplate, который явно связывает некоторые параметры с запросом строка.) QueryStringConverter-это часть, которая может конвертировать между параметры операции и их представление в строке запроса.
...
QueryStringConverter по умолчанию, используемый webhttpbehavior поддерживает изначально несколько типов, включая все простые числовые типы