2010-07-08 23 views
2

Nous essayons de passer un nombre variable de valeur paires de clés à notre service en utilisant le WebGetAttribute et le UriTemplate pour exposer une interface REST. Ce que nous voulons faire:WCF: Comment passer un nombre variable de paramètres à un service permis de WebGet

[WebGet(UriTemplate="/Query/Select?{query}"] 
Response Query(string query); 

A côté client nous voulons spécifier des clés à plusieurs reprises, par exemple:
hllp: // localhost/MyService/Recherche/Sélectionner le champ = Nom & fieldsort = asc & champ = ID

Notre première approche a consisté à utiliser le UriTemplate et pour décomposer les valeurs-clés paires manuellement suivant:

[WebGet(UriTemplate="/Query/{*query}"] 
ResponseQuery(string query); 

Bu t Cela vaut pour segments et ainsi les URL comme
hllp: // localhost/MyService/Recherche/champ = Val% 3Due se décode automatiquement par WCF et "champ = Val = UE" seront transmis au Méthode de service

Pire encore, doubles URL codées obtenir complètement décodés aussi:
hllp: // localhost/MyService/Recherche/champ = Val% 253Due devient "champ = Val = UE" à nouveau.

Est-il possible, pour accéder à la chaîne de requête brute? Sinon, nous pouvons étendre/utilisation UriTemplate d'une autre façon, de travailler avec un nombre dynamique de paires de valeurs-clés?

+0

mais comment passez-vous ces paramètres à votre méthode de service? – Nicolas

Répondre

3

En utilisant WebOperationContext.Current nous a permis d'obtenir la chaîne de requête brute, qui va maintenant être analysé par nous-même.