为什么我不能在WCF REST POST方法中使用两个参数?

时间:2011-06-17 13:32:48

标签: c# wcf

我有合同:

    [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);

我有实施方法:

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)
  {

  }

当我浏览到:

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

我收到此错误:

  '/'应用程序中的服务器错误。   操作'SubmitVideoPOST'的   合同'IVLSContentService'   指定多个请求正文   要进行序列化的参数   任何包装元素。最多一个身体   参数可以没有序列化   包装元素。要么删除   额外的身体参数或设置   BodyStyle属性   WebGetAttribute / WebInvokeAttribute为   缠绕。

当我添加POST的新方法(我还没有尝试访问)时,我才开始在Get请求中收到此错误,这是什么意思?我不能使用多个参数吗?

4 个答案:

答案 0 :(得分:18)

看看这张海报提出同样问题的link

相关部分是:

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.

因此,在您的情况下,您必须将操作合同更改为以下内容:

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

答案 1 :(得分:6)

XML不会有一个带有两个参数的根节点,这会导致它不正确。要引入单个根节点,必须按照错误说明,“包装”它。这使得该方法期望围绕两个数据的包装元素

将BodyStyle = WebMessageBodyStyle.Wrap添加到WebInvoke属性

答案 2 :(得分:3)

您是否尝试将WebGetAttribute / WebInvokeAttribute上的BodyStyle属性设置为Wrapped,如同建议的错误,如下所示:

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

答案 3 :(得分:1)

我自己对WCF REST有些新意,上周刚刚完成了我的第一次服务。但我有类似的问题。 This article让我朝着正确的方向前进。包装器是我的问题。