45 votes

Paramètres de chaîne de requête facultatifs dans URITemplate in WCF?

Je suis le développement de certains services RESTful dans WCF 4.0. J'ai une méthode que ci-dessous:

[OperationContract]
    [WebGet(UriTemplate = "Test?format=XML&records={records}", ResponseFormat=WebMessageFormat.Xml)]
    public string TestXml(string records)
    {
        return "Hello XML";
    }

Donc, si je peux naviguer dans mon navigateur http://localhost:8000/Service/Test?format=XML&records=10puis tout fonctionne comme exepcted.

CEPENDANT, je veux être capable de naviguer à http://localhost:8000/Service/Test?format=XML et de laisser sur le "&documents=10" la partie de l'URL. Mais maintenant, je reçois une erreur de service depuis l'URI ne correspond pas à celle attendue modèle URI.

Alors, comment puis-je mettre en œuvre les valeurs par défaut pour certains de mes paramètres de chaîne de requête? Je tiens à défaut, les "records" de 10 par exemple, si la partie est à gauche de la chaîne de requête.

53voto

luksan Points 4063

Cela ne semble pas être pris en charge.

Cependant, Microsoft a été mis au courant de ce problème et il y a un travail autour de:

Vous pouvez obtenir l'effet désiré par l'omission de la chaîne de Requête à partir de la UriTemplate sur votre WebGet ou WebInvoke attribut, et à l'aide de WebOperationContext.Actuel.IncomingRequest.UriTemplateMatch.QueryParameters à partir de vos gestionnaires d'inspecter,de par défaut, etc. sur la requête les paramètres.

https://connect.microsoft.com/VisualStudio/feedback/details/451296/

17voto

Olly Points 2982

Selon cette réponse, cela est corrigé dans .NET 4.0. Le fait de ne pas fournir le paramètre de chaîne de requête semble avoir pour résultat de lui donner la valeur par défaut pour le type.

4voto

MonkeyWrench Points 813

Consultez ce blog poste. Fait sens pour moi, et est livré avec une classe d'analyser les paramètres de chaîne de requête.

http://blogs.msdn.com/b/rjacobs/archive/2009/02/10/ambiguous-uritemplates-query-parameters-and-integration-testing.aspx

Fondamentalement, ne pas définir les paramètres de chaîne de requête dans le UriTemplate de sorte qu'il corresponde avec/sans les paramètres, et utiliser l'exemple de la classe pour les récupérer s'ils sont là, dans la méthode de la mise en œuvre.

4voto

JOKe Points 459

Oui, je peux confirmer après WCF 4.0 que cela fonctionne comme un charme, comme décrit ici. WCF et paramètres facultatifs

2voto

Navy Seal Points 77

Cela semble fonctionner dans WCF 4.0.
Assurez-vous simplement de définir votre valeur par défaut dans votre "Service1.svc.cs"

 public string TestXml(string records)
{
  if (records == null)
      records = "10";

  //... rest of the code
}
 

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