首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在带有.Net的Rest中使用POST

在带有.Net的Rest中使用POST
EN

Stack Overflow用户
提问于 2010-06-30 20:30:32
回答 3查看 3K关注 0票数 1

我已经使用WCF和Rest-toolkit在.Net的新REST-service中成功添加和使用了Get操作。该服务的定义如下:

代码语言:javascript
运行
复制
[OperationContract]
[WebGet(UriTemplate = "/{id}")]
Foo GetFooById(string id);

我在客户端这样称呼它:

代码语言:javascript
运行
复制
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操作,但是您如何定义它,以及如何映射参数?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-30 21:12:20

为了POST参数,您需要使用DataContractSerializer序列化它。例如,

在服务器上:

代码语言:javascript
运行
复制
[OperationContract]
[WebInvoke(Method="POST",UriTemplate = "/foos")]
void PostFoo(Foo foo) {}

在客户端上:

代码语言:javascript
运行
复制
var foo = new Foo();
var content = HttpContentExtensions.CreateDataContract<Foo>(foo);
var client = new HttpClient("http://example.org/service.svc/foos");
client.Post(content)

请注意,在创建此代码的过程中没有涉及任何编译器,买家要小心。

票数 3
EN

Stack Overflow用户

发布于 2010-06-30 21:07:11

您需要WebInvoke属性而不是WebGet属性

代码语言:javascript
运行
复制
[OperationContract]
[[WebInvoke(Method = "POST", UriTemplate = "/{id}")]
Foo PutFooById(string id, Foo foo)

请注意,"POST“实际上是默认方法,因此如果您愿意,可以省略它。

票数 2
EN

Stack Overflow用户

发布于 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占位符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3149235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档