我有一个 Linq 表达式,我想将它转换为 REST 的查询字符串,即
public IQueryable<Organisation> Organisations;
...
var organisations = Organisations.Where(x => x.Name == "Bob");
变成
http://restservice.com/Organisations?$filter=Name eq "Bob"
如果您可以控制数据源,那么您正在寻找的就是OData 。
谷歌搜索了HttpEntityClient,虽然我没有任何经验,但它看起来很有用。
我想您也可以编写自己的实现,因为坦率地说,rest-apis 在过滤、排序等方面不必遵循一定的标准......
PocoHttp可以做你想做的事。此外,它可以为您调用服务并反序列化实体。
您还可以轻松修改其 ODataProvider 以支持其他 OData 本机功能(长度、startswith 等)
OData 库的早期预发布版本有一个查询字符串解析器,但表达式构建从未完全实现,然后该功能被删除。这是库中的主要漏洞,因为没有它,您只剩下有效负载和一些标头支持。
幸运的是, Linq2Rest完全符合您的需求,只需一行代码:
var organisations = Organisations.sources.Filter(Request.Params).OfType<Organisations>()
强制转换是必要的,因为查询字符串可以针对集合进行选择,从而产生不同的类型集合。如果您只预测属性,那么您就不会关心这一点。
我发现微软开发的 DataServiceContext 比这里提到的 Linq2Rest 和 HttpEntityClient 第三方库更流畅。文档也好多了。缺点是 DataServiceContext 仅适用于 XML(无 JSON)。但是,如果客户端在 HTTP 标头中请求,WebAPI OData REST 服务和 WCF 数据服务都可以返回 XML。因为 XML 支持不需要额外的开发工作,所以缺少 JSON 支持不太可能成为问题。
有使用 DataServiceContext 的 LINQ to REST 示例:http: //msdn.microsoft.com/en-us/library/windowsazure/dd894039.aspx
试试大数据
开放数据协议 (OData) 是一种用于查询和更新数据的 Web 协议,它提供了一种解锁数据并将其从当今应用程序中存在的孤岛中解放出来的方法。OData 通过应用和构建 Web 技术(例如 HTTP、Atom 发布协议 (AtomPub) 和 JSON)来实现这一点,以提供对来自各种应用程序、服务和商店的信息的访问。该协议源于过去几年在各种产品中实现 AtomPub 客户端和服务器的经验。OData 被用于公开和访问来自各种来源的信息,包括但不限于关系数据库、文件系统、内容管理系统和传统网站。
编辑 1:也请看这里:http: //paulhammant.com/2012/02/13/client-side-mvc-frameworks-compared/