Использование POST в покое с .Net - PullRequest
1 голос
/ 30 июня 2010

Я успешно добавил и использовал действие Get в моем новом REST-сервисе в .Net с использованием WCF и Rest-toolkit.Служба определяется следующим образом:

[OperationContract]
[WebGet(UriTemplate = "/{id}")]
Foo GetFooById(string id);

И я называю это так со стороны клиента:

public Foo GetFoo(string id)
{
    var httpClient = new HttpClient("http://127.0.0.1:8000/");
    var response = httpClient.Get("foo/" + id);
    return response.Content.ReadAsDataContract<Foo>();
}

Теперь я хочу добавить действие POST, но как вы определяетеэто, и как вы отображаете параметры?

Ответы [ 3 ]

3 голосов
/ 30 июня 2010

Для того, чтобы POST-параметры вам необходимо сериализовать, используя DataContractSerializer.Например,

На сервере:

[OperationContract]
[WebInvoke(Method="POST",UriTemplate = "/foos")]
void PostFoo(Foo foo) {}

На клиенте:

var foo = new Foo();
var content = HttpContentExtensions.CreateDataContract<Foo>(foo);
var client = new HttpClient("http://example.org/service.svc/foos");
client.Post(content)

Обратите внимание, что при создании этого кода не было задействовано никакого компилятора, покупатель, будьте осторожны.

2 голосов
/ 30 июня 2010

Вам нужен атрибут WebInvoke вместо WebGet:

[OperationContract]
[[WebInvoke(Method = "POST", UriTemplate = "/{id}")]
Foo PutFooById(string id, Foo foo)

Обратите внимание, что на самом деле "POST" является методом по умолчанию, поэтому его можно опустить, если вы хотите.

0 голосов
/ 30 июня 2010

Я полагаю, вы завернули это в XML. Здесь обсуждается (ответ предоставлен):

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/00c93f9f-f1f3-4f08-9927-db0e4ed91d2d

Также необходимо указать тип содержимого запроса как application / xml. Так вы также можете передавать пользовательские классы (XML-представление этих классов).

Вы определяете его с помощью атрибута WebInvoke, очень похожего на то, как вы работали с WebGet. Однако WebInvoke не использует заполнители URL, которые вы использовали в WebGet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...