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

时间:2010-09-17 22:11:39

标签: c# wcf rest

我尝试了以下代码:

 [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

3 个答案:

答案 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。