2010-09-23 17 views
30

Scaricato il modello REST WCF dalla posizione this.WCF 4.0: WebMessageFormat.Json non funziona con Modello REST WCF

Il formato di risposta predefinito è XML, che funziona benissimo. Tuttavia, quando cerco di ottenere una risposta JSON, ottengo comunque XML.

Questo è il mio codice modificato -

[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" } }; 
    } 

Annotare il ResponseFormat = WebMessageFormat.Json. Questo è l'unico cambiamento che ho fatto a quel modello.

Cosa mi manca?

Grazie!

risposta

56

Capito. La proprietà automaticFormatSelectionEnabled per standardendpoint deve essere impostata su false e defaultOutgoingReponseFormat deve essere impostato su Json.

+0

sto usando .net Framework 3.5, come farlo con esso? –

+0

+1 interessante che la mia app silverlight in IE avrebbe avuto JSON, mentre la stessa app in esecuzione in firefox 4 avrebbe ottenuto xml. Questo però lo ha risolto. –

+25

+1 Incredibile come 'ResponseFormat = WebMessageFormat.Json' viene silenziosamente ignorato, e devi capirlo! WCF sarebbe del tutto inutilizzabile senza Google – Andomar

5

Per me, l'impostazione del formato di risposta su JSON nell'attributo WebGet non funziona. Lo inserisce nel corpo del metodo;

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


// This doesn't work 
`[WebGet(UriTemplate = "/conditions?term={term}", ResponseFormat = WebMessageFormat.Json)]` 
6
<system.serviceModel> 
     <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
     <standardEndpoints> 
      <webHttpEndpoint> 
       <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="false" defaultOutgoingResponseFormat="Json"/> 
      </webHttpEndpoint> 
     </standardEndpoints> 
</system.serviceModel> 

Modifiche a 2 attributi all'interno del web.config sarà risolvere il problema:

  • automaticFormatSelectionEnabled=false
  • defaultOutgoingResponseFormat=Json (modificati: da "vero")
1

Click - >reference links

"Quando la selezione automatica del formato è abilitata, l'infrastruttura analizza l'intestazione Accept del messaggio di richiesta e determina il formato di risposta più appropriato. Se l'intestazione Accept non specifica un formato di risposta adeguata, l'infrastruttura utilizza il Content-Type del messaggio di richiesta o il formato risposta predefinita dell'operazione "

EDIT:. questo link potrebbe farti andare avanti http://blogs.msdn.com/b/endpoint/archive/2010/11/01/wcf-webhttp-service-returns-http-415-unsupported-media-type.aspx

Problemi correlati