2010-09-23 13 views
30

Se ha descargado la plantilla WCF REST desde la ubicación this.WCF 4.0: WebMessageFormat.Json no funciona con la plantilla WCF REST

El formato de respuesta predeterminado es XML, que funciona muy bien. Sin embargo, cuando trato de obtener una respuesta JSON, sigo recibiendo XML.

Este es mi código modificado -

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

Nota del ResponseFormat = WebMessageFormat.Json. Ese es el único cambio que le hice a esa plantilla.

¿Qué me estoy perdiendo?

Gracias!

Respuesta

56

Calculado. automaticFormatSelectionEnabled propiedad para standardendpoint debe establecerse en false y defaultOutgoingReponseFormat debe establecerse en Json.

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

uso .net Framework 3.5, ¿cómo hacer esto con él? –

+0

+1 interesante que mi aplicación silverlight en IE obtendría json, mientras que la misma aplicación que se ejecuta en firefox 4 obtendría xml. Esto lo arregló sin embargo. –

+25

+1 ¡Increíble cómo se ignora silenciosamente 'ResponseFormat = WebMessageFormat.Json', y hay que resolver esto! WCF sería completamente inutilizable sin Google – Andomar

5

Para mí, el ajuste del formato de respuesta a JSON en el atributo WebGet no funciona. Establecerlo en el cuerpo del método sí lo hace;

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

Cambios en 2 atributos dentro del web.config lo arreglará:

  • automaticFormatSelectionEnabled=false
  • defaultOutgoingResponseFormat=Json (editados: de "verdadero")
1

Click - >reference links

"Cuando la selección de formato automático está habilitada, la infraestructura analiza el encabezado Aceptar del mensaje de solicitud y determina el formato de respuesta más apropiado. Si el encabezado Accept no especifica un formato de respuesta adecuada, la infraestructura utiliza el tipo de contenido del mensaje de petición o el formato de respuesta por defecto de la operación "

EDIT:. este enlace puede ser que consiga que se mueve por delante http://blogs.msdn.com/b/endpoint/archive/2010/11/01/wcf-webhttp-service-returns-http-415-unsupported-media-type.aspx