2011-06-17 11 views
10

tengo contrato:¿Por qué no puedo usar dos argumentos en un método WCF REST POST?

[OperationContract] 
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Xml, UriTemplate = "GetCategoriesGET/{userIdArg}", BodyStyle = WebMessageBodyStyle.Bare)] 
    List<Video> GetVideosGET(string userIdArg); 

    [WebInvoke(Method = "POST", UriTemplate = "evals")] 
    [OperationContract] 
    void SubmitVideoPOST(Video videoArg, string userId); 

Y tengo los métodos de ejecución:

public List<Video> GetVideosGET(string userIdArg) 
{ 

    List<Video> catsToReturn = new List<Video>(); 

    if (Int32.Parse(userIdArg) == 1) 
    { 
     catsToReturn = catsForUser1; 
    } 
    else if (Int32.Parse(userIdArg) == 2) 
    { 
     catsToReturn = catsForUser2; 
    } 

    return catsToReturn; 

    } 


    public void SubmitVideoPOST(Video videoArg, string userId) 
    { 

    } 

Cuando hojeo a:

http://localhost:52587/Api/Content/VLSContentService.svc/GetCategoriesGET/1 

Im conseguir este error:

Server Error in '/' Application. Operation 'SubmitVideoPOST' of contract 'IVLSContentService' specifies multiple request body parameters to be serialized without any wrapper elements. At most one body parameter can be serialized without wrapper elements. Either remove the extra body parameters or set the BodyStyle property on the WebGetAttribute/WebInvokeAttribute to Wrapped.

Solo comencé a obtener este error en la solicitud Obtener cuando agregué el nuevo método para POST (que no he intentado acceder), ¿qué significa esto? ¿Puedo usar más de un argumento?

Respuesta

17

Eche un vistazo a este link donde el cartel hace la misma pregunta.

La parte pertinente es:

WCF doesn't support more than one parameter with bare body, 
if you need pass several parameters in one post method operation, 
then we need set the BodyStyle to Wrapped. 

Así que en su caso se tendría que cambiar su contrato de operación a lo siguiente:

[WebInvoke(Method = "POST", UriTemplate = "evals", BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
[OperationContract] 
void SubmitVideoPOST(Video videoArg, string userId); 
+0

aplausos, sí, lo siento, debería haber parecido más cerca, totalmente confundido con todo el asunto, pero lo conseguí gracias. – Exitos

+5

Lo hice pero no funcionó – AMH

+0

Hice lo mismo, pero no funcionaba. Eliminé el BodyStyle luego funcionó –

3

¿Usted intentó establecer la propiedad de carrocería en la WebGetAttribute/WebInvokeAttribute a Envuelto como el error sugerido, como este:

[WebInvoke(Method = "POST", UriTemplate = "evals", BodyStyle = WebMessageBodyStyle.Wrapped)] 
[OperationContract] 
void SubmitVideoPOST(Video videoArg, string userId); 
6

El XML no tendrá un solo nodo raíz con dos parámetros que lo convertirían en no bien formado. Para introducir un nodo raíz único que tenga que hacer como dice el error, "envuélvalo". Esto hace que el método esperar un elemento de envoltura alrededor de las dos piezas de datos

Añadir bodystyle = WebMessageBodyStyle.Wrapped a la WebInvoke atributo

1

estoy un poco nuevo en WCF REST mí mismo, acaba de hacer mi primer servicio de la semana pasada. Pero tuve problemas similares. This article me comenzó en la dirección correcta. El contenedor fue mi problema.

Cuestiones relacionadas