代码之家  ›  专栏  ›  技术社区  ›  stiank81

在Rest中与.Net一起使用POST

  •  1
  • stiank81  · 技术社区  · 16 年前

    [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 回复  |  直到 16 年前
        1
  •  3
  •   Darrel Miller    16 年前

    为了发布参数,需要使用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
  •  2
  •   Dan Puzey    16 年前

    你需要 WebInvoke 属性而不是 WebGet

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

        3
  •  0
  •   Adam Houldsworth    16 年前

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

    您还需要将请求内容类型指定为application/xml。这也是传递自定义类(这些类的XML表示)的方式。

    您可以使用WebInvoke属性来定义它,这与您使用WebGet所做的非常相似。但是,WebInvoke不使用您在WebGet中使用的URL占位符。

    推荐文章