通过get方法无法在wcf服务中传递参数

时间:2014-09-30 07:27:34

标签: wcf

我正在开发wcf服务,我希望根据父类别选择返回子类别。

这是我的界面:

[ServiceContract]
    public interface iServiceRegistration
    {
        [OperationContract]
      [WebInvoke(RequestFormat = WebMessageFormat.Json, BodyStyle =WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, Method = "GET")]
   IEnumerable<SelectListItem> GetSubCategories(int categoryId);
    }

    public class Service : iServiceRegistration 
    {
        public IEnumerable<SelectListItem> GetSubCategories(int categoryId)
        {
                           //code
        }
     }

我正在使用mozilla的REST客户端来测试这项服务。现在,当我从其他客户端调用此方法时,这样:

{
 "categoryId": "1"
}

然后0进入我的参数categoryId。

谁能告诉我这个问题是什么?????

2 个答案:

答案 0 :(得分:1)

您指定的方法为GET(另外,请勿使用[WebInvoke(Method = "GET")];请改用[WebGet]。 GET请求中的参数在查询字符串中传递,而不是在请求正文中传递。您应该更改客户端(REST客户端)以发送以下请求:

GET http://your-service/endpoint/GetSubCategories?categoryId=1

或者更改方法以接受POST次请求:

[WebInvoke(Method = "POST",
           RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,
           BodyStype = WebMessageBodyStyle.WrappedRequest)]
IEnumerable<SelectListItem> GetSubCategories(int categoryId);

并在POST电话的正文中发送请求:

POST http://your-service/endpoint/GetSubCategories
Content-Type: application/json
Content-Length: XXX

{"categoryId":1}

答案 1 :(得分:0)

您错过了 UriTemplate ,在get方法中,您需要在url中传递参数。 所以你的电话应该是

<强> http://yourservice.svc/UriTemplate/parameter