如何为asp.net webapi构建可重用的.Net客户端,包括IQueryable功能等

时间:2012-05-30 08:02:22

标签: c# .net httpclient asp.net-web-api

我最近玩过ASP.NET WebAPI,包括一些显示结果的Html-Pages,在浏览器/小提琴手等中试用OData查询,我真的很感动,到目前为止一切都很好。

但是... 现在我尝试构建一个可重用的.Net客户端库,它可以轻松访问WebAPI公开的所有方法。 我试图通过Linq2Rest(伟大的IQueryable-Interface!)和我自己用HttpClient实现Wrappers。

我对Linq2Rest的问题:

  • 它不是来自微软,我担心微软会有很多变化,这些变化在某些时候不会反映在Linq2Rest上。
  • 此外我还没有真正看到如何使用Linq2Rest调用Put / Delete / Post,每个“Linq2Rest-Context”中都有一个HttpClient看起来非常难看

当我尝试使用HttpClient自己实现客户端时,我不知道如何

  • 针对IQueryable-WebAPI-Get发出调用,而不先将每条记录加载到客户端(在我的场景中,约20000条记录非常常见)
  • 避免在每个“APIController”-Client中编写非常相似的代码,最后我将拥有大约15-20个控制器,非常相似但返回不同的“对象”

感谢您的每一个建议......

2 个答案:

答案 0 :(得分:4)

我是Linq2Rest的开发者,您的积分非常有效。创建Linq2Rest是为了在WebAPI之外添加OData支持。如果您已经在使用WebAPI,那么请务必坚持使用Microsoft。

它不是来自Microsoft,但OData是一个开放标准,Linq2Rest是根据标准文档实现的。开源已经意味着Linq2Rest能够比微软更频繁地发布。出于这个原因,它已经支持来自OData 3规范的Any / All查询,Microsoft目前不支持这些查询。

将客户端注入每个上下文是为了减少它支持的服务的限制。现在由您来定义端点。我正在考虑如何从单个上下文支持多个端点。

目前它不支持PUT / POST / DELETE,但如果您在项目中将其作为功能请求发布(https://bitbucket.org/jjrdk/linq2rest/issues?status=new&status=open),然后它肯定会被添加到管道中。

编辑:最新的预发布版增加了对PUT / POST / DELETE操作的支持。该API目前正在测试中。如果您从2.5.0.0下载版本,那么您将获得对它的支持。

答案 1 :(得分:0)

如果您正在寻找Odata图书馆。然后从Microsoft

尝试这个

http://blogs.msdn.com/b/astoriateam/archive/2011/10/14/introducing-the-odata-library.aspx