2011-03-12 32 views
7

He escrito un servicio REST en WCF en el que he creado un método (PUT) para actualizar a un usuario. para este método que necesito para pasar varios parámetros corporalesCómo pasar múltiples parámetros corporales en wcf rest usando el método webinvoke (Post o PUT)

[WebInvoke(Method = "PUT", UriTemplate = "users/user",BodyStyle=WebMessageBodyStyle.WrappedRequest)] 
[OperationContract] 
public bool UpdateUserAccount(User user,int friendUserID) 
{ 
    //do something 
    return restult; 
} 

A pesar de que puede pasar a una entidad XML de clase de usuario si hay sólo un parámetro. como sigue:

var myRequest = (HttpWebRequest)WebRequest.Create(serviceUrl); 
myRequest.Method = "PUT"; 
myRequest.ContentType = "application/xml"; 
byte[] data = Encoding.UTF8.GetBytes(postData); 
myRequest.ContentLength = data.Length; 
//add the data to be posted in the request stream 
var requestStream = myRequest.GetRequestStream(); 
requestStream.Write(data, 0, data.Length); 
requestStream.Close(); 

pero cómo pasar otro valor de parámetro (friendUserID)? ¿Alguien puede ayudarme?

Respuesta

11

Para todos los tipos de métodos excepto GET, solo se puede enviar un parámetro como el elemento de datos. Así que, o mover el parámetro de cadena de consulta

[WebInvoke(Method = "PUT", UriTemplate = "users/user/{friendUserID}",BodyStyle=WebMessageBodyStyle.WrappedRequest)] 
[OperationContract] 
public bool UpdateUserAccount(User user, int friendUserID) 
{ 
    //do something 
    return restult; 
} 

o añadir el parámetro como nodo en los datos de la solicitud

<UpdateUserAccount xmlns="http://tempuri.org/"> 
    <User> 
     ... 
    </User> 
    <friendUserID>12345</friendUserID> 
</UUpdateUserAccount> 
+0

Gracias Amit. Hice lo mismo y está funcionando bien :) –

Cuestiones relacionadas