我已经使用WCF和Rest-toolkit在.Net的新REST-service中成功添加和使用了Get操作。该服务的定义如下:
[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操作,但是您如何定义它,以及如何映射参数?
发布于 2010-06-30 21:12:20
为了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)请注意,在创建此代码的过程中没有涉及任何编译器,买家要小心。
发布于 2010-06-30 21:07:11
您需要WebInvoke属性而不是WebGet属性
[OperationContract]
[[WebInvoke(Method = "POST", UriTemplate = "/{id}")]
Foo PutFooById(string id, Foo foo)请注意,"POST“实际上是默认方法,因此如果您愿意,可以省略它。
发布于 2010-06-30 20:41:56
我相信您将其包装在XML中。在这里讨论(提供答案):
http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/00c93f9f-f1f3-4f08-9927-db0e4ed91d2d
此外,您还需要将请求Content-Type指定为application/xml。这也是传递自定义类(这些类的XML表示形式)的方式。
您可以使用WebInvoke属性来定义它,这与您处理WebGet的方式非常相似。但是,WebInvoke不使用您在WebGet中使用的URL占位符。
https://stackoverflow.com/questions/3149235
复制相似问题