我有一个Linq表达式,我想将它转换为REST的查询字符串,即。
public IQueryable<Organisation> Organisations;
...
var organisations = Organisations.Where(x => x.Name == "Bob");
变为
http://restservice.com/Organisations?$filter=Name eq "Bob"
答案 0 :(得分:7)
答案 1 :(得分:2)
如果您控制数据源,那么OData就是您要找的。 p>
谷歌搜索带来了HttpEntityClient,虽然我没有任何经验,但它看起来很有用。
我想你也可以编写自己的实现,因为坦率地说,在过滤,订购等方面,rest-apis不必遵循一定的标准......
答案 2 :(得分:2)
PocoHttp可以完全按照您的意愿行事。此外,它可以为您执行服务调用和反序列化实体。
您还可以轻松修改其ODataProvider以支持其他OData本机功能(长度,开头等)
答案 3 :(得分:2)
OData Library的早期预发布版本有一个查询字符串解析器,但表达式构建从未完全实现,然后删除了该功能。它是图书馆的主要漏洞,因为没有它,你只剩下有效载荷和一些标题支持。
幸运的是Linq2Rest完全符合您的要求,只需一行代码:
var organisations = Organisations.sources.Filter(Request.Params).OfType<Organisations>()
强制转换是必要的,因为查询字符串可以针对集合进行选择,从而生成不同类型的集合。如果你只是在预测属性,那么你就不在乎了。
答案 4 :(得分:1)
我发现Microsoft开发的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
答案 5 :(得分:0)
尝试Odata
开放数据协议(OData)是一种用于查询和更新数据的Web协议,它提供了解锁数据并将其从当今应用程序中存在的孤岛中解放出来的方法。 OData通过应用和构建HTTP,Atom发布协议(AtomPub)和JSON等Web技术来实现这一目标,以提供对来自各种应用程序,服务和商店的信息的访问。该协议源自过去几年在各种产品中实施AtomPub客户端和服务器的经验。 OData用于公开和访问来自各种来源的信息,包括但不限于关系数据库,文件系统,内容管理系统和传统网站。
编辑1: 看看这里: http://paulhammant.com/2012/02/13/client-side-mvc-frameworks-compared/