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

我可以在uritemplate中使用对象吗?

  •  5
  • Xaisoft  · 技术社区  · 14 年前

    我尝试了以下代码:

     [OperationContract]
     [WebInvoke(UriTemplate="/Users/Register/{user}")]
     void Register(User user);
    

    但是当我尝试运行这个时,它告诉我uritemplate必须只包含字符串。如果我需要将一个对象传递给我的方法,就像在本例中一样,将一个用户对象传递给我的注册方法。

    如果我将webinvoke属性更改为:

    [WebInvoke(UriTemplate="/Users/Register/")]
    

    浏览器显示错误 Method not allow 当我试图浏览到 http://localhost:8000/Users/Register 例如

    3 回复  |  直到 14 年前
        1
  •  6
  •   Steve Michelotti    14 年前

    您只能使用uritemplate中的字符串。可以使用多个参数传递多个字符串,但不能使用复杂类型。如果您想传递一个复杂的类型,那么它不能在URI中的任何地方,而是在post/put请求的主体中。GET请求不接受消息正文。因此,可以将上面的代码更改为:

    [OperationContract]
    [WebInvoke(Method = "POST", UriTemplate="/Users/Register")]
    void Register(User user);
    

    在其中传递用户对象,而不是通过URI,而是作为post请求的一部分。

        2
  •  0
  •   Nathan Wheeler    14 年前

    正如它所说。实际上,URI只能包含字符串。它们不是为物品制造的。如果需要,您可以将其转换为使用用户名或用户ID…但不能将复杂对象类型用作URI。

        3
  •  0
  •   Kirk Woll    14 年前

    你不把对象作为查询字符串参数传递(你怎么能?它会以某种方式序列化它吗?)你应该输入用户ID。