71 votes

Puis-je passer une chaîne de caractères au service WCF RESTful en utilisant UriTemplate ?

Puis-je faire ce qui suit ?

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

J'aimerais que mon service fonctionne à la fois comme un service RESTful et un service SOAP de type RPC. Si possible, j'aimerais conserver int comme int, et ne pas faire le parsing à la main.

78voto

Cameron Taggart Points 1144

Comme dthrasher l'a mentionné, déplacez id dans la partie requête de l'URI. Cela a fonctionné pour moi :

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

Voir "Schéma URI" sur wikipedia pour plus d'informations sur les différentes parties d'un URI : http://en.wikipedia.org/wiki/URI_scheme

69voto

dthrasher Points 10641

Si je me souviens bien, les variables UriTemplate dans le chemin d'accès sont toujours résolues en chaînes de caractères lorsque l'on utilise WebGet ou WebInvoke. Vous ne pouvez lier les variables UriTemplate à des int, long, etc. que lorsqu'elles se trouvent dans la partie requête de l'UriTemplate.

5voto

Ohad Schneider Points 10485

Comme d'autres l'ont mentionné, vous devez utiliser des chaînes de requête afin de transmettre des paramètres autres que des chaînes. L'article suivant détaille comment l'analyse syntaxique est effectuée.

WCF Extensibility - QueryStringConverter

Revenir au "bon" sens WCF extensibilité, le post de cette semaine est sur le QueryStringConverter. Il s'agit en fait d'un sujet simple à couvrir, car son objectif est assez simple. spécifique (contrairement à d'autres points d'extensibilité vus auparavant, qui pourraient être utilisé pour une grande variété de cas) - au sein de WCF le site QueryStringConverter n'est utilisé que sur les points d'extrémité qui ont l'attribut WebHttpBehavior leur est appliqué. Et même dans ceux-là, seulement sur les opérations dont les paramètres sont passés via les chaînes de requête. (soit les opérations avec des paramètres marqués avec [WebGet] ou une opération [WebInvoke] avec une UriTemplate qui associe explicitement certains paramètres à la chaîne de de la requête). Un QueryStringConverter est la pièce qui peut convertir les paramètres d'une opération en leur représentation dans une chaîne de requête. paramètres de l'opération et leur représentation dans une chaîne de requête.

...

Le QueryStringConverter par défaut utilisé par le WebHttpBehavior prend en charge nativement plusieurs types, dont tous les types numériques simples (Octet, Octet, Int16, Int32, Int64, UInt16, UInt32, UInt64, Simple, Double, Decimal), Boolean, Char, Object, String, DateTime, DateTimeOffset, TimeSpan, Guid, Uri, et tableaux d'octets (essentiellement, tous les types que le DataContractSerializer considère comme des " primitives ", à l'exception de XmlQualifiedName). Les types d'énumération sont également supportés par défaut (la représentation en chaîne des valeurs de l'enum est la suivante sont utilisées). Enfin, il existe également un autre ensemble de types qui sont pris en charge par le QueryStringConverter par défaut - tous ceux qui déclarent un attribut [TypeConverter] avec un convertisseur de type qui peut convertir le type en et depuis des chaînes de caractères (plus d'informations). vers et depuis des chaînes de caractères (plus d'informations à ce sujet ci-dessous).

3voto

Andrew Hare Points 159332

Malheureusement, vous devez effectuer vous-même l'analyse syntaxique si vous souhaitez utiliser la fonction UriTemplate .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X