我尝试了以下代码:
[OperationContract]
[WebInvoke(UriTemplate="/Users/Register/{user}")]
void Register(User user);
但是当我尝试运行它时,它告诉我UriTemplate必须只包含字符串。如果我需要将一个对象传递给我的方法,如本例中的一个User对象,我的寄存器方法。
如果我将WebInvoke属性更改为:
[WebInvoke(UriTemplate="/Users/Register/")]
当我尝试浏览http://localhost:8000/Users/Register时,浏览器会显示错误Method not allow
答案 0 :(得分:6)
您仅限于UriTemplate中的字符串。您可以使用多个参数来传递多个字符串,但不能使用复杂类型。如果要传递复杂类型,则它不能位于URI中的任何位置,而是位于POST / PUT请求的主体中。 GET请求不接受邮件正文。因此,您的上述代码可以更改为:
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate="/Users/Register")]
void Register(User user);
你在传递User对象的地方,而不是通过Uri,而是作为POST请求的一部分。
答案 1 :(得分:0)
正如它所说的那样。 URI实际上只能包含字符串。它们不是为物体而制造的。如果需要,您可以将其转换为使用用户名或用户ID ...但您永远不能将复杂对象类型用作URI。
答案 2 :(得分:0)
你不会将对象作为查询字符串参数传递(你怎么能?它会以某种方式序列化它?)你应该传入用户ID。