在REST中传递DTO以获取GET请求

时间:2013-04-24 17:04:52

标签: c# asp.net wcf rest

我为搜索用户提供了一种REST方法。现在我正在使用以下REST方法签名:

MyResponse GetUsers(UserSearchDTO search, int pageno, int totalrecords);

即它接受UserSearchDTO,pageno和totalrecords param的一个对象。该网址将如下所示

myapp/users?pageno={pageno}&totalrecords={totalrecords}

最终客户端将发送此服务的“PUT”请求,如:

myapp/users?pageno=1&totalrecords=10以及它将传递UserSearchDTO发布的xml数据,如

<UserSearchDTO><Department>d</Department><Name>abc</Name></UserSearchDTO>

这是一个很好的架构,即为了让用户使用“PUT”请求类型。这样做的原因是因为最终客户端必须以xml格式传递UserSearchDTO?

我想的另一种方法是纯粹的“GET”,即不使用UserSearchDTO我应该有以下签名:

  MyResponse GetUsers(string department,string name,...., int pageno, int totalrecords);

并且终端客户端将其称为: myapp / users?department = d&amp; name = abc&amp; ......&amp; pageno = 1&amp; totalrecords = 10

2 个答案:

答案 0 :(得分:0)

我正在编写我的第一个REST服务,所以我不是专家,但在我看来,我认为最好使用GET请求,因为这正是你正在做的事 - 获取数据从服务器。这将使其他开发人员更容易支持该应用程序,而不是试图弄清楚为什么使用PUT进行基本数据检索。

如果可能,我建议您尝试将UserSearchDTO XML作为字符串在客户端上转换并将其作为字符串传递给GetUsers方法,然后将该字符串加载到服务器上的XmlDocument()中并将其解析为DTO 。然后您的方法签名将如下所示:

MyResponse GetUsers(string userSearchXmlString, int pageno, int totalrecords);

答案 1 :(得分:0)

看起来你正在使用WCF REST。使用WCF REST,您必须自己实现查询机制。您是否考虑过使用ASP.NET Web API?在Web API中,您的GetUsers()方法只需返回IQueryable<User>,并使用OData querying capability对其进行Web API包装,以便为您处理投影,过滤,排序,聚合和分页。