2009-09-03 7 views
1

J'ai écrit un service WCF REST Collection simple avec REST Start Kit Preview 2. Le projet modèle fournit une classe Service avec une instance de collection Dictionary comme éléments de collection interne. Chaque élément a une clé et une valeur.Service REST: Obtenir une requête vers une URL avec un paramètre de chaîne spécial

Le problème est que si la clé contient un '.' comme 'ProductA.Item1', ma requête sur un élément spécifique ne fonctionnera pas. La requête GET URL pour cet article est quelque chose comme:

http://localhost:1247/Service.svc/ProductA.Item1 

Il ressemble à IIS traite l'URL comme une ressource au lieu de passer xxx.xxx comme paramètre à ma méthode de service REST OnGetItem (id string). Si je supprime la partie de '.Item1' (la construction de la collection interne avec des touches sans point comme 'ProductAItem1'), cela fonctionne très bien.

J'ai même essayé de me changer WebGet de UriTemplate d'attribut aux produits ({id}), puis essayé cette URL personnalisée: méthode

http://localhost:1247/Service.svc/Products(ProductA.Item1) 
    http://localhost:1247/Service.svc/Products('ProductA.Item1') 

encore je ne peux pas atteindre à mon code OnGetItem (string id). Sans les touches de type point, l'URL personnalisée fonctionne également.

Je ne suis pas sûr que ce point ou '.' dans l'URL est un caractère spécial par le serveur IIS ou non. Comment puis-je l'échapper ou le faire comme un paramètre de chaîne avec un point à l'intérieur s'il s'agit d'un caractère spécial? Ou je ne peux tout simplement pas utiliser le point dans mon URL?

Répondre

0

Je crois que le problème que vous rencontrez est causé par le fonctionnement des classes dans System.Web.Routing. Apparemment, cela était un problème pour les gars ASP.NET MVC (see blog post) mais selon ce post de Phil Haack, le problème est censé être résolu. Peut-être que le kit de démarrage REST n'utilise pas encore la nouvelle DLL de routage?

+0

C'est très possible. Le service de routage peut bloquer l'appel à OnGetItem(). Je vais vérifier dans le forum ASP.Net. Merci! –

Questions connexes