Meilleure façon de prendre en charge les données de publication “application / x-www-form-urlencoded” avec WCF?

StackOverflow https://stackoverflow.com/questions/604463

Question

Je suis en train de créer un service WCF basé sur une spécification W3C qui définit un point de terminaison de service Web RESTful qui accepte "application / x-www-form-urlencoded". publier des données. WCF ne prend pas en charge ce type de codage de message par défaut et j’ai trouvé un certain nombre d’exemples de création de contrat ressemblant à ceci:

XElement Query_Post(Stream postData);

Et ensuite, dans l’implémentation, décodage du flux postData à l’aide de la méthode HttpUtility.ParseQueryString .

Est-ce que quelqu'un connaît une méthode plus typée de prise en charge de "application / x-www-form-urlencoded"? dans la WCF?

J'aimerais que mon contrat d'exploitation soit:

XElement Query_Post(string query, string [] params);
Était-ce utile?

La solution

Le meilleur moyen consiste à utiliser Stream comme POST HTTP brut avec WCF ou ce que vous dites. La raison en est que WCF extrait du code de service tout le contenu physique de la présentation au niveau de la communication. Idéalement, vous voudriez créer un service qui pourrait se transformer en SOAP ou REST en inversant simplement le commutateur.

Pour le prendre en charge de manière native, vous devez probablement étendre WebHttpBinding ou créer votre propre liaison et implémenter encodeur personnalisé . Ceci est symétrique à la sortie comme le dit le post lié. Vous devez tordre les bras pour que WCF produise des éléments non XML / JSON.

Autres conseils

La bibliothèque WCF REST Contrib active cette fonctionnalité:

https://github.com/mikeobrien/WcfRestContrib

Il inclut un formateur POX et un formateur codé pour l’URL de formulaire et vous permet de créer facilement le vôtre. Les formats sont mappés aux types mime et sélectionnés automatiquement pour sérialiser / désérialiser le corps d'entité en fonction du type de contenu et accepter les en-têtes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top