如何使用多个参数调用RESTful WCF服务方法?

时间:2011-01-04 18:51:25

标签: .net wcf json rest service

我有一个RESTful WCF服务,其方法声明如下:

[OperationContract(Name = "IncrementAge")]
[WebInvoke(UriTemplate = "/", Method = "POST", ResponseFormat = WebMessageFormat.Json)]
Person IncrementAge(Person p);

以下是实施:

public Person IncrementAge(Person p)
{
            p.age++;

            return p;
}

因此,它采用Person复杂类型,将age属性递增1,然后使用JSON序列化将其吐回。我可以通过向服务发送POST消息来测试该事情,如下所示:

POST http://localhost:3602/RestService.svc/ HTTP/1.1
Host: localhost:3602
User-Agent: Fiddler
Content-Type: application/json
Content-Length: 51

{"age":25,"firstName":"Hejhaj","surName":"Csuhaj"}

这很有效。如果我想要这样的方法怎么办?

Person IncrementAge(Person p, int amount);

所以它有多个参数。我应该如何构建POST消息以使其工作?这可能吗?

由于

2 个答案:

答案 0 :(得分:8)

您应该使邮件正文样式包装,以便您可以在POST请求正文中接受多个参数。

您的方法签名将是:

[OperationContract(Name = "IncrementAge")]
[WebInvoke(UriTemplate = "/", Method = "POST",
           ResponseFormat = WebMessageFormat.Json,
           BodyStyle = WebMessageBodyStyle.WrappedRequest)]
Person IncrementAge(Person p, int amount);

请求的正文如下:

{"p": {"age":25,"firstName":"Hejhaj","surName":"Csuhaj"}, "amount": 1}

外部JSON对象是匿名包装器。

答案 1 :(得分:3)

您可以使用查询字符串参数

POST /RestService.svc/Incrementor?amount=23
{...}

我认为WCF签名是:

[OperationContract(Name = "IncrementAge")]
[WebInvoke(UriTemplate = "/?amount={amount}", Method = "POST", ResponseFormat = WebMessageFormat.Json)]
Person IncrementAge(int amount, Person p);