重点关注之OData with List
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的更多相关文章
- Web API系列
ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务. ASP.NET Web API 是一种用于在 .NET Framework 上构 ...
- ASP.NET WebApi系列
ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务. ASP.NET Web API 是一种用于在 .NET Framework 上构 ...
- ABP框架 - OData 集成
文档目录 本节内容: 简介 安装 安装Nuget包 设置模块依赖 配置你的实体 创建控制器 示例 获取实体列表 请求 响应 获取单个实体 请求 响应 获取单个实体及导航属性 请求 响应 查询 请求 响 ...
- ABP源码分析三十八: ABP.Web.Api.OData
如果对OData不熟悉的话可参考OData的初步认识一文以获取OData的一些初步知识. API.Odata 模块唯一用处就是提供了一个泛型版本的ODataController,实现了Controll ...
- OData Client Code Generator
转发. [Tutorial & Sample] How to use OData Client Code Generator to generate client-side proxy cla ...
- Microsoft Dynamics CRM 2013 Js Odata 查询
实现功能: 在新建记录时,(大区,省区,城市)的值默认为当前用户的值.tips:字段均为lookup类型; function Default_region(){ var fromtype=Xrm. ...
- 让OData和NHibernate结合进行动态查询
OData是一个非常灵活的RESTful API,如果要做出强大的查询API,那么OData就强烈推荐了.http://www.odata.org/ OData的特点就是可以根据传入参数动态生成Ent ...
- Web Api系列教程第2季(OData篇)(二)——使用Web Api创建只读的OData服务
前言 很久没更新了,之前有很多事情,所以拖了很久,非常抱歉.好了,废话不多说,下面开始正题.本篇仍然使用上一季的的项目背景(系列地址http://www.cnblogs.com/fzrain/p/34 ...
- ABP理论学习之OData集成(新增)
返回总目录 本篇目录 介绍 安装 创建控制器 例子 样例项目 介绍 OData在其官网的定义是: 允许以一种 简单且标准的方式创建和使用可查询的.可互操作的RESTful APIs. 在ABP中也可以 ...
随机推荐
- Spring的DI(Ioc) - 注入集合类型
1: 首先给service添加集合类型的属性,并提供getter, setter package cn.gbx.serviceimpl; import java.util.ArrayList; imp ...
- 无限极分类,传递一个子ID得到所有父集,用于在前台分层显示标题
方法: static public function getParents($data,$id){ $arr=array(); foreach ($data as $v) { if ($v['id'] ...
- JAVA入门 第五周 1多项式
1 多项式加法(5分) 题目内容: 一个多项式可以表达为x的各次幂与系数乘积的和,比如: 现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出. 程序要处理的 ...
- UI设计基础百科
摘自:http://www.csdn.net/article/2013-09-10/2816892-iOS-dev-tools-design 我的原型设计流程 这是一份UX原型设计流程,用来探索交互设 ...
- datagrid实现单行的选择、取消
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- date 笔记
1 语法 # date --help 用法:date [选项]... [+格式] 或:date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] 1.1 ...
- linux 相关学习记录
(一)概念① 物理CPU实际Server中插槽上的CPU个数物理cpu数量,可以数不重复的 physical id 有几个② 逻辑CPU /proc/cpuinfo 用来存储cpu硬件信息的信息内容分 ...
- paramiko-客户端和服务器认证工具
required: python+pycrypto 1.安装pycrypto 726 cd /opt/ 727 wget http://ftp.dlitz.net/pub/dlitz/crypto/p ...
- oracel数据库基本知识和基本查询方法
Oracel数据库学习1.小型数据库 access,foxbase 中型数据库 mysql,sqlserver,informix 大型数据库 sybase,Oracle,db2 Oracle数据库需求 ...
- Unity5.1 新的网络引擎UNET(二) UNET 官方推荐Demo案例
http://blog.csdn.net/u010019717/article/details/46873153 视频 http://www.iqiyi.com/playlist391685502.h ...