Как вызвать метод сервиса RESTful WCF с несколькими параметрами? - PullRequest
2 голосов
/ 04 января 2011

У меня есть служба 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 на единицу и выплевывает его обратно, используя сериализацию 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 ]

8 голосов
/ 05 октября 2011

Вы должны сделать стиль тела сообщения упакованным , чтобы можно было принимать несколько аргументов в теле запроса 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 является анонимной оболочкой.

3 голосов
/ 05 января 2011

Вы можете использовать параметр строки запроса,

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...