OData是什么

官方解释:The Open Data Protocol (OData) is a data access protocol for the web. OData provides a uniform way to query and manipulate data sets through CRUD operations (create, read, update, and delete).

开始使用OData

要想使用OData,还有以下工作要做。

a.安装OData的程序包。可以通过NuGet程序包管理器安装,安装命令:Install-Package Microsoft.AspNet.Odata

b.配置OData EndPoint。在WebApiConfig的Register方法中注册OData路由和创建EDM,代码如下图。

c.创建OData Controller和Action,代码如下图。

现在可以访问下面两个url看看效果。

http://localhost.dev.wingontravel.com/HWAODataSite/opi?$metadata

,查看元数据,如下图

http://localhost.dev.wingontravel.com/HWAODataSite/opi/Citys?$select=CityName,CityEnglishName ,查询CityName和CityEngLishName,多个字段用,号分隔,如下图。

查询

先来看一下OData支持哪些查询选项,汇总如下图,然后来分别说明和演示。

①$select,一般用来返回指定的字段,如url:http://localhost.dev.wingontravel.com/HWAODataSite/opi/Citys?$select=CityName,CityEnglishName

②$filter,一般用于过滤结果。如下面例子。

•http://localhost.dev.wingontravel.com/HWAODataSite/opi/Citys?$filter=CityCode eq ‘TSN’,过滤CityCode=“TSN”

•http://localhost.dev.wingontravel.com/HWAODataSite/opi/Citys?$filter=CityID lt 5,过滤CityID<5

•http://localhost.dev.wingontravel.com/HWAODataSite/opi/Citys?$filter=CityID ge 5,过滤CityID>5

http://localhost.dev.wingontravel.com/HWAODataSite/opi/Citys?$filter=substringof(‘T’,CityCode),过滤CityCode包含”T”的,报错’ An unknown function with name 'substringof' was found’,还不知道为什么。

重要:要使用filter功能,必须激活它。如下代码。

③$skip和$top,一般用于分页。

•$skip和$top基于客户端分页,比如url:http://localhost.dev.wingontravel.com/HWAODataSite/opi/Citys?$top=5&$skip=5

•[PageSize]属性,服务端分页,如下代码,限制接口一次只能返回10条记录。

④$orderby,排序。比如

•http://localhost.dev.wingontravel.com/HWAODataSite/opi/Citys?$orderby= CityID desc,按CityID降序排

•http://localhost.dev.wingontravel.com/HWAODataSite/opi/Citys?$orderby= CityCode,CityID desc,组合排序

重要:要使用orderby,需要激活。如下代码。

3.1 一个综合查询的例子

需求:查询CityID<16,取第二页(每页5条数据),按CityID降序排序,并且只返回CityName+CityEnglishName两个字段的城市信息。

Url:

http://localhost.dev.wingontravel.com/HWAODataSite/opi/Citys?$filter=CityID lt 16&$top=5&$skip=5&$orderby=CityID desc&$select=CityName,CityEnglishName

注意:这个url放在fiddler中需要encode

OData V4特性路由

OData v4的特性路由类似于WebApi 2的特性路由,可以向Controller添加ODataRoutePrefix和向Action添加ODataRoute特性,它们都是在命名空间System.Web.OData.Routing下,而WebApi 2的特性路由在命名空间System.Web.Http下。如下代码。

附:以上Demo已经放到GitHub上了。

1.https://github.com/mcgrady525/HelloWebAPI ,路由,序列化和模型绑定

2.https://github.com/mcgrady525/HelloWebAPI.OData ,OData和重点关注的部分

重点关注之OData with List的更多相关文章

  1. Web API系列

    ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务. ASP.NET Web API 是一种用于在 .NET Framework 上构 ...

  2. ASP.NET WebApi系列

    ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务. ASP.NET Web API 是一种用于在 .NET Framework 上构 ...

  3. ABP框架 - OData 集成

    文档目录 本节内容: 简介 安装 安装Nuget包 设置模块依赖 配置你的实体 创建控制器 示例 获取实体列表 请求 响应 获取单个实体 请求 响应 获取单个实体及导航属性 请求 响应 查询 请求 响 ...

  4. ABP源码分析三十八: ABP.Web.Api.OData

    如果对OData不熟悉的话可参考OData的初步认识一文以获取OData的一些初步知识. API.Odata 模块唯一用处就是提供了一个泛型版本的ODataController,实现了Controll ...

  5. OData Client Code Generator

    转发. [Tutorial & Sample] How to use OData Client Code Generator to generate client-side proxy cla ...

  6. Microsoft Dynamics CRM 2013 Js Odata 查询

    实现功能:   在新建记录时,(大区,省区,城市)的值默认为当前用户的值.tips:字段均为lookup类型; function Default_region(){ var fromtype=Xrm. ...

  7. 让OData和NHibernate结合进行动态查询

    OData是一个非常灵活的RESTful API,如果要做出强大的查询API,那么OData就强烈推荐了.http://www.odata.org/ OData的特点就是可以根据传入参数动态生成Ent ...

  8. Web Api系列教程第2季(OData篇)(二)——使用Web Api创建只读的OData服务

    前言 很久没更新了,之前有很多事情,所以拖了很久,非常抱歉.好了,废话不多说,下面开始正题.本篇仍然使用上一季的的项目背景(系列地址http://www.cnblogs.com/fzrain/p/34 ...

  9. ABP理论学习之OData集成(新增)

    返回总目录 本篇目录 介绍 安装 创建控制器 例子 样例项目 介绍 OData在其官网的定义是: 允许以一种 简单且标准的方式创建和使用可查询的.可互操作的RESTful APIs. 在ABP中也可以 ...

随机推荐

  1. LINQ 如何实现 in 与 not in

    T-SQL的IN: Select ProductID, ProductName, CategoryID From dbo.Products Where CategoryID , ) T-SQL的NOT ...

  2. HDU3247 AC自动机+dp

    题意:给出n个资源,m个病毒,将资源串拼接成一个串,必须包含所有的资源串,可以重叠,但是不能包含病毒,问最小的长度为多少 题解:所有串建AC自动机.对以资源串结尾的结点跑bfs,求出到其他资源串结尾的 ...

  3. poj3525Most Distant Point from the Sea(半平面交)

    链接 求凸多边形内一点距离边最远. 做法:二分+半平面交判定. 二分距离,每次让每条边向内推进d,用半平面交判定一下是否有核. 本想自己写一个向内推进..仔细一看发现自己的平面交模板上自带.. #in ...

  4. mysql 求时间段平均值

    考虑下面的需求,在一段时间内,间隔一段时间,取一个平均值,把所有的平均值取出来,怎么办?思路:在存储过程中,拼接sql语句.根据起始时间和结束时间,while循环每次加一段时间.DROP PROCED ...

  5. C/C++中static关键字作用总结

    来来来,来看这篇文章: http://www.cnblogs.com/biyeymyhjob/archive/2012/07/19/2598815.html 总结一下: 1.先来介绍它的第一条也是最重 ...

  6. C10K及C100K问题探讨 & 怎么应对大流量大并发

    首先开宗明义,离开业务单独讨论并发,都是扯淡. 就像 https://www.zhihu.com/question/20493166/answer/15998053 这里面说的 谈并发必然要谈业务,空 ...

  7. 网络粘贴---Xcode中可用到的快捷键

    快捷键: 1.StoryBoard技巧 当你想直接在view中选择自己想要的元素时,但是又碍于一个view上叠加的元素太多很难直接选中,那么在这时,你同时按住键盘上的shift和 control键,然 ...

  8. 养成好的JAVA编码习惯

    原文:http://blog.csdn.net/lifuxiangcaohui/article/details/25231027 最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下 ...

  9. spring+redis实现缓存

    spring + redis 实现数据的缓存 1.实现目标 通过redis缓存数据.(目的不是加快查询的速度,而是减少数据库的负担) 2.所需jar包 注意:jdies和commons-pool两个j ...

  10. VirtualBox的网络配置,Host Only+NAT方式 (zhuan)

    http://blog.csdn.net/xinghun_4/article/details/7969894 ***************************************** 其实网 ...