¿Puedo pasar sin cadena al servicio RESTful WCF usando UriTemplate?


Puedo hacer lo siguiente?

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

Me gustaría que mi servicio funcione como servicio RESTful y servicio SOAP estilo RPC. Si es posible me gustaría mantener int como int, y no hacer análisis a mano.

Author: Fabian Steeg, 2009-02-13

4 answers

Si no recuerdo mal, las variables UriTemplate en la ruta siempre se resuelven a cadenas cuando se usa WebGet o WebInvoke. Solo puede enlazar variables UriTemplate a int, long, etc. cuando están en la parte de consulta de la UriTemplate.

 68
Author: dthrasher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-18 15:43:23

Como dthrasher mencionó, mueva id a la parte de consulta del URI. Esto funcionó para mí:

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

Consulte "Esquema URI" en wikipedia para obtener más información sobre las diferentes partes de un URI: http://en.wikipedia.org/wiki/URI_scheme

 74
Author: Cameron Taggart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-05 00:55:56

Como otros mencionaron, debe usar cadenas de consulta para pasar parámetros que no sean cadenas. El siguiente artículo detalla cómo se realiza el análisis.

WCF Extensibility-QueryStringConverter

Volviendo a " proper" WCF extensibilidad, el post de esta semana es sobre el QueryStringConverter. Este es en realidad un tema simple para ser cubierto, ya que su propósito es bastante específico (a diferencia de otros puntos de extensibilidad vistos antes, que podrían ser utilizado para una amplia variety of cases) - within WCF the QueryStringConverter solo se usa en endpoints que tienen el WebHttpBehavior aplicado a ellos. E incluso en aquellos, solo en operaciones que tienen parámetros pasados a través de las cadenas de consulta (cualquiera de las operaciones con parámetros marcados con [WebGet] o una operación [WebInvoke] con una UriTemplate que enlaza explícitamente algunos parámetros a la consulta cadena). Un QueryStringConverter es la pieza que puede convertir entre parámetros de operación y sus representación en una cadena de consulta.

...

El QueryStringConverter predeterminado utilizado por WebHttpBehavior soporta de forma nativa varios tipos, incluyendo todos los tipos numéricos simples (Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Individual, Doble, Decimal), Boolean, Char, Objeto, Cadena, DateTime, DateTimeOffset, TimeSpan, Guid, Uri, y arrays de Byte (esencialmente, todos los tipos que el DataContractSerializer considera "primitivas", con la excepción de XmlQualifiedName). Los tipos de enumeración también son soportado por defecto (la representación de cadena de los valores enum son utilizar). Finalmente, también hay otro conjunto de tipos que son compatibles por defecto QueryStringConverter-cualquiera que declare un [TypeConverter] atributo con un convertidor de tipo que puede convertir escriba hacia y desde cadenas (más sobre esto a continuación).

 4
Author: Ohad Schneider,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-22 16:07:59

Desafortunadamente debes hacer el análisis tú mismo si quieres usar el UriTemplate.

 3
Author: Andrew Hare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-13 14:02:26