如何为 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 功能等的主要内容,如果未能解决你的问题,请参考以下文章