2011-07-26 35 views
8

Uso de Fiddler Publiqué un mensaje JSON en mi servicio WCF. El servicio utiliza System.ServiceModel.Activation.WebServiceHostFactoryWCF REST POST de JSON: El parámetro está vacío

[OperationContract] 
[WebInvoke 
(UriTemplate = "/authenticate", 
     Method = "POST", 
     ResponseFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.WrappedRequest 
     )] 
String Authorise(String usernamePasswordJson); 

Cuando se realiza el POST, yo soy capaz de entrar en el código, pero el parámetro usernamePasswordJson es nula . ¿Por qué es esto?

Nota: strangly cuando me puse la bodystyle a Bare, el puesto ni siquiera llegar al código de depuración para mí.

Aquí está la pantalla violinista: enter image description here

Respuesta

18

Se ha declarado en el parámetro de tipo String, por lo que está a la espera de una cadena JSON - y estás pasando un objeto JSON a ella.

Para recibir esa solicitud, es necesario tener un contrato similar a la de abajo:

[ServiceContract] 
public interface IMyInterface 
{ 
    [OperationContract] 
    [WebInvoke(UriTemplate = "/authenticate", 
      Method = "POST", 
      ResponseFormat = WebMessageFormat.Json, 
      BodyStyle = WebMessageBodyStyle.Bare)] 
    String Authorise(UserNamePassword usernamePassword); 
} 

[DataContract] 
public class UserNamePassword 
{ 
    [DataMember] 
    public string UserName { get; set; } 
    [DataMember] 
    public string Password { get; set; } 
} 
+0

fantástico. Eso funcionó como un sueño. Después de un día de frustración, finalmente tengo una solución. –

+0

Fantástico, tuve problemas con los datos nulos pasados ​​al servicio y su sugerencia resolvió el problema. Gracias por compartir. – Signcodeindie

+0

Creo que la línea mágica 'BodyStyle = WebMessageBodyStyle.Bare' fue lo que me había estado forzando a pasar * ¡no quiero contar * horas! ¡Gracias por publicar este fragmento! –

Cuestiones relacionadas