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

Posted

技术标签:

【中文标题】如何为 asp.net webapi 构建可重用的 .Net 客户端,包括 IQueryable 功能等【英文标题】:How to build a reusable .Net client for asp.net webapi, including IQueryable capabilities etc 【发布时间】:2012-05-30 08:02:22 【问题描述】:

我最近玩弄了 ASP.NET WebAPI,包括一些显示结果的 html-Pages,在浏览器/fiddler 中尝试 OData 查询等,我印象深刻,到目前为止一切都很好。

但是…… 现在我正在尝试构建一个可重用的 .Net 客户端库,它可以轻松访问 WebAPI 公开的所有方法。 我已经尝试通过 Linq2Rest(很棒的 IQueryable-Interface!)并使用 HttpClient 自己实现 Wrappers 来做到这一点。

我的 Linq2Rest 问题:

它不是来自 Microsoft,我担心 Microsoft 会做出很多更改,这些更改在某些时候不会反映在 Linq2Rest 中。 另外我真的不知道如何使用 Linq2Rest 调用 Put/Delete/Post,每个“Linq2Rest-Context”中都有一个 HttpClient 看起来很丑

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

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

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

【问题讨论】:

【参考方案1】:

我是 Linq2Rest 的开发者,您的观点非常有效。创建 Linq2Rest 是为了在 WebAPI 之外添加 OData 支持。如果您已经在使用 WebAPI,那么一定要坚持使用 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 下载版本,那么您会找到对它的支持。

【讨论】:

抱歉我迟到了你的回答,我应该检查我的通知设置......无论如何,我会看看最新的预发布,这听起来很有希望,谢谢你的回答和为开发 Linq2Rest 所做的努力。【参考方案2】:

如果您正在寻找 Odata Library 。然后试试这个来自 Micrsoft 的

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

【讨论】:

以上是关于如何为 asp.net webapi 构建可重用的 .Net 客户端,包括 IQueryable 功能等的主要内容,如果未能解决你的问题,请参考以下文章

您如何为 angularjs 可重用组件打包资产?

.NET - 如何为大型 CSS 文件构建主题

WebApi MVC 6,有没有办法重用MVC授权?

建筑材料系统 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发

如何为 django 可重用应用程序启动测试?

ASP.NET WebAPI --- 简单实现增删改查