29 votes

WCF 4.0 : WebMessageFormat.Json ne fonctionne pas avec WCF REST Template

Télécharger le modèle WCF REST à partir de este l'emplacement.

Le format de réponse par défaut est XML, ce qui fonctionne très bien. Cependant, lorsque j'essaie d'obtenir une réponse JSON, j'obtiens toujours XML.

Voici mon code modifié -

[WebGet(UriTemplate = "",ResponseFormat = WebMessageFormat.Json)]
    public List<SampleItem> GetCollection()
    {
        // TODO: Replace the current implementation to return a collection of SampleItem instances
        return new List<SampleItem>() { new SampleItem() { Id = 1, StringValue = "Hello" } };
    }

Notez le ResponseFormat=WebMessageFormat.Json. C'est la seule modification que j'ai apportée à ce modèle.

Qu'est-ce que je manque ?

Merci de votre attention !

56voto

Ryan Points 631

Compris. automaticFormatSelectionEnabled pour le point de terminaison standard doit être fixée à false et la valeur de defaultOutgoingReponseFormat doit être fixée à Json .

<standardEndpoint name="" helpEnabled="true" 
    automaticFormatSelectionEnabled="false" 
    defaultOutgoingResponseFormat ="Json" />

6voto

Ton Snoei Points 51
 <system.serviceModel>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
        <standardEndpoints>
            <webHttpEndpoint>
                <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="false" defaultOutgoingResponseFormat="Json"/>
            </webHttpEndpoint>
        </standardEndpoints>
 </system.serviceModel>

La modification de deux attributs dans le fichier web.config résoudra le problème :

  • automaticFormatSelectionEnabled=false
  • defaultOutgoingResponseFormat=Json (édité : de "vrai")

4voto

Alistair77 Points 453

Pour moi, définir le format de réponse à JSON dans l'attribut WebGet ne fonctionne pas. Le définir dans le corps de la méthode fonctionne ;

// This works
WebOperationContext.Current.OutgoingResponse.Format = WebMessageFormat.Json;
return jsonData;

// This doesn't work
`[WebGet(UriTemplate = "/conditions?term={term}", ResponseFormat = WebMessageFormat.Json)]`

1voto

ChristoD Points 61

Cliquez sur -> liens de référence

"Lorsque la sélection automatique du format est activée, l'infrastructure analyse l'en-tête Accept du message de demande et détermine le format de réponse le plus approprié. Si l'en-tête Accept ne spécifie pas de format de réponse approprié, l'infrastructure utilise le Content-Type du message de demande ou le format de réponse par défaut de l'opération."

EDITAR: Ce lien pourrait vous permettre d'aller de l'avant http://blogs.msdn.com/b/endpoint/archive/2010/11/01/wcf-webhttp-service-returns-http-415-unsupported-media-type.aspx

0voto

Mike Gledhill Points 2105

Je rencontrais des problèmes de ce type à chaque fois que j'essayais de créer un service web JSON.

Il me suffit maintenant de suivre les étapes indiquées ici.

http://mikesknowledgebase.com/pages/Services/WebServices-Page1.htm

Il montre comment créer un service web JSON, étape par étape, avec des captures d'écran et des exemples.

J'espère que cela vous aidera.

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