2010-09-23 11 views
30

Die WCF-REST-Vorlage wurde von this heruntergeladen.WCF 4.0: WebMessageFormat.Json funktioniert nicht mit der WCF-REST-Vorlage

Das Standardantwortformat ist XML, das funktioniert sehr gut. Wenn ich jedoch versuche, eine JSON-Antwort zu erhalten, bekomme ich immer noch XML.

Das ist mein modifizierten Code -

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

Notiere die Response = WebMessageFormat.Json. Das ist die einzige Änderung, die ich an dieser Vorlage vorgenommen habe.

Was fehlt mir?

Danke!

Antwort

56

Herausgefunden. automaticFormatSelectionEnabled Eigenschaft für Standardendpoint sollte auf false festgelegt werden und defaultOutgoingReponseFormat sollte auf Json festgelegt werden.

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

ich benutze .net Framework 3.5, wie man das damit macht? –

+0

+1 interessant, dass meine Silverlight-App im IE Json bekommen würde, während die gleiche App in Firefox 4 XML laufen würde. Das hat es aber behoben. –

+25

+1 Unglaublich, wie 'ResponseFormat = WebMessageFormat.Json' still ignoriert wird, und Sie müssen dies herausfinden! WCF wäre völlig ohne Google unbrauchbar – Andomar

5

Für mich funktioniert das Festlegen des Antwortformats zu JSON in dem WebGet-Attribut nicht. Setzen Sie es im Körper der Methode tut;

// 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> 

Änderungen 2 Attribute innerhalb der web.config werden es beheben:

  • automaticFormatSelectionEnabled=false
  • defaultOutgoingResponseFormat=Json (bearbeitet: von "true")
1

Click - >reference links

"Wenn die automatische Formatauswahl aktiviert ist, analysiert die Infrastruktur den Accept-Header der Anforderungsnachricht und bestimmt das am besten geeignete Antwortformat. Wenn der Accept-Header keine geeignete Antwort-Format angeben, verwendet die Infrastruktur, um die Content-Type der Anforderungsnachricht oder die Standardantwortformat der Operation „

EDIT:. diesen Link können Sie sich zu bewegen voraus http://blogs.msdn.com/b/endpoint/archive/2010/11/01/wcf-webhttp-service-returns-http-415-unsupported-media-type.aspx

0

ich schlug Fragen wie diese jedes Mal, wenn ich versuchte, einen JSON-Webdienst zu erstellen.

Nun, ich folge nur die Schritte, die hier gezeigt.

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

Es zeigt, wie Sie Schritt für Schritt einen JSON-Webservice mit Screenshots und Beispielen erstellen.

Hoffe, das hilft.

Verwandte Themen