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. AJAX 简介

    什么是 AJAX ? AJAX = 异步 JavaScript 和 XML. AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味 ...

  2. NPN&PNP

    一.晶体管基础知识 晶体管分2种:NPN.PNP 晶体管通常封装为TO-92,下面是元件实物图 和 元件符合: NPN: 当电压和电流被加到基极上时,NPN晶体管: 其工作原理: 就像水龙头—给控制开 ...

  3. java乱码问题(转)

    参考: http://blog.csdn.net/beijiguangyong/article/details/7414247 http://www.zhihu.com/question/202126 ...

  4. iOS - CoreMotion

    前言 NS_CLASS_AVAILABLE(NA,4_0) @interface CMMotionManager : NSObject @available(iOS 4.0, *) public cl ...

  5. jquery.pagination.js分页

    参数说明 参数名 描述 参数值 maxentries 总条目数                           必选参数,整数 items_per_page 每页显示的条目数            ...

  6. JavaSE 复习_4 接口多态和内部类

    △abstract不可以修饰成员变量 △一个类可以没有抽象方法,可以定义为抽象类,这样的目的是不能让其他类建立本类对象,交给子类完成. △abstract和static(可以被类名调用方法,但是抽象方 ...

  7. hdu 5317 RGCDQ(前缀和)

    题目链接:hdu 5317 这题看数据量就知道需要先预处理,然后对每个询问都需要在 O(logn) 以下的复杂度求出,由数学规律可以推出 1 <= F(x) <= 7,所以对每组(L, R ...

  8. [js] 前端性能优化

    原文链接:http://www.cnblogs.com/xxcanghai/p/5205998.html 链接:http://www.zhihu.com/question/21658448/answe ...

  9. Android开发面试经——4.常见Android进阶笔试题(更新中...)

      Android开发(29)  版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http:/ ...

  10. C++时间函数模板

    //测时间 class Timer { private: clock_t _start; clock_t _end; public: Timer() { start(); } void start() ...