J'ai un service restul WCF et je veux permettre à l'utilisateur de choisir quel format demande qu'ils veulent, j'ai les décorationsWCF WebInvoke ResponseFormat
[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "getstreamurl?ch={ch}&format=xml")]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "getstreamurl?ch={ch}&format=json")]
D'abord, est-il un moyen de spécifier le ResponseFormat à runtime et prendre le format en tant qu'argument à la méthode? De la lecture autour je ne pense pas ainsi ... OK la prochaine chose Le code ci-dessus est correct et fonctionne, mais im ayant un problème, je veux pouvoir spécifier un défaut, donc quand aucun argument de format est passé alors je par défaut mais si je décore comme si
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "getstreamurl?ch={ch})]
[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "getstreamurl?ch={ch}&format=json")]
Lorsque le XML est la valeur par défaut, si je tente d'appeler la méthode de service à travers le navigateur, il me dit que:
UriTemplateTable ne prend pas en charge plusieurs modèles qui ont équivalent path comme modèle 'getstreamurl? ch = {ch}' mais ont des chaînes de requête différentes, où les chaînes de requête ne peuvent pas toutes être désambiguïsées via des valeurs littérales. Voir la documentation pour UriTemplateTable pour plus de détails
Ils peuvent évidemment être distingués mais il semble que WCF ne fait que lire l'argument et que c'est ... Des suggestions?
Ceci est incorrect. Comme Regfor le fait remarquer dans sa réponse, vous pouvez avoir le même point de terminaison renvoyer XML ou json en passant la valeur appropriée dans l'en-tête Accept. –
@Steve Michelotti: cette nouvelle fonctionnalité a été introduite avec WCF 4.0 dans .NET 4.0 - il était ** pas ** disponible en Juin 2009 quand j'ai répondu à WCF 3.5 –
ah, j'ai raté la date (Juin 2009) quand j'ai lu ceci la première fois. –