1.1,什么是OData?

还是看OData官网的简单说明:

An open protocol to allow the creation and consumption of queryable and interoperable RESTful APIs in a simple and standard way.

这是一个开放的数据查询和服务协议,目前已经有众多厂商和平台支持,已经形成了完整的生态链,这应该是未来数据查询的标准,参见官网说明

OData的意义还在于,它能够大大简小SOA架构里面服务的粒度,只需要提供一个OData数据源,而查询工作交给客户端去做即可,这将大大减少服务端服务方法定义的数量。

OData的版本现在已经是V4了,之前的很多类库都是基于V1-V3版本的。现在的V4版本已经很完善了,而且成为了工业标准,所以现在可以放心的在项目中使用了。

1.2,OData on .NET

OData 的前身是WCF Data Service,后来演变成跨平台的数据查询协议,现在,除了WCF支持OData,ASP.NET WebAPI 已经内置支持OData了,这将获得一种轻量级的,Rest架构的OData访问方案,本文将讲解如何在VS 2013上搭建一个OData 服务和客户端程序。

1.3,参考资源

在阅读本文之前,首先建议你参考下面的OData 学习资源,本文也是根据这里的资源整理而成,之所以要重新整理一次,是因为原文说的并不清楚,给出的示例程序有些小小的问题,而且国内有关OData的文章介绍非常少。

http://www.odata.org/blog/how-to-use-web-api-odata-to-build-an-odata-v4-service-without-entity-framework/
http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/create-an-odata-v4-endpoint
http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/create-an-odata-v4-client-app

本文的实例程序相关代码请在此下载。

二、OData WebAPI搭建

2.1,创建项目

新建一个ASP.NET WebAPI 项目,名字是 ODataWebApplication ,如下图:

OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service & Client

注意选择一个空项目,并购选WebAPI,单击确定。

2.2,添加Asp.Net OData 支持

打开VS2013的程序包管理器控制台,在下面输入 Install-Package Microsoft.AspNet.OData 命令,如下图:

OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service & Client

这里会添加很多附属的程序集文件,下面是一个详细的清单列表,如果你的符合下面的内容,就表示安装成功了:

键入“get-help NuGet”以查看所有可用的 NuGet 命令。

PM> Install-Package Microsoft.AspNet.OData 
正在尝试解析依赖项“Microsoft.AspNet.WebApi.Client (≥ 5.2.2)”。 
正在尝试解析依赖项“Newtonsoft.Json (≥ 6.0.4)”。 
正在尝试解析依赖项“Microsoft.AspNet.WebApi.Core (≥ 5.2.2 && < 5.3.0)”。 
正在尝试解析依赖项“Microsoft.OData.Core (≥ 6.10.0 && < 7.0.0)”。 
正在尝试解析依赖项“Microsoft.Spatial (= 6.10.0)”。 
正在尝试解析依赖项“Microsoft.OData.Edm (= 6.10.0)”。 
正在安装“Newtonsoft.Json 6.0.8”。 
已成功安装“Newtonsoft.Json 6.0.8”。 
正在安装“Microsoft.AspNet.WebApi.Client 5.2.3”。 
您正在从 Microsoft 下载 Microsoft.AspNet.WebApi.Client,有关此程序包的许可协议在 http://www.microsoft.com/web/webpi/eula/net_library_eula_ENU.htm 上提供。请检查此程序包是否有其他依赖项,这些依赖项可能带有各自的许可协议。您若使用程序包及依赖项,即构成您接受其许可协议。如果您不接受这些许可协议,请从您的设备中删除相关组件。 
已成功安装“Microsoft.AspNet.WebApi.Client 5.2.3”。 
正在安装“Microsoft.AspNet.WebApi.Core 5.2.3”。 
您正在从 Microsoft 下载 Microsoft.AspNet.WebApi.Core,有关此程序包的许可协议在 http://www.microsoft.com/web/webpi/eula/net_library_eula_ENU.htm 上提供。请检查此程序包是否有其他依赖项,这些依赖项可能带有各自的许可协议。您若使用程序包及依赖项,即构成您接受其许可协议。如果您不接受这些许可协议,请从您的设备中删除相关组件。 
已成功安装“Microsoft.AspNet.WebApi.Core 5.2.3”。 
正在安装“Microsoft.Spatial 6.10.0”。 
您正在从 Microsoft Corporation 下载 Microsoft.Spatial,有关此程序包的许可协议在 http://go.microsoft.com/?linkid=9809688 上提供。请检查此程序包是否有其他依赖项,这些依赖项可能带有各自的许可协议。您若使用程序包及依赖项,即构成您接受其许可协议。如果您不接受这些许可协议,请从您的设备中删除相关组件。 
已成功安装“Microsoft.Spatial 6.10.0”。 
正在安装“Microsoft.OData.Edm 6.10.0”。 
您正在从 Microsoft Corporation 下载 Microsoft.OData.Edm,有关此程序包的许可协议在 http://go.microsoft.com/?linkid=9809688 上提供。请检查此程序包是否有其他依赖项,这些依赖项可能带有各自的许可协议。您若使用程序包及依赖项,即构成您接受其许可协议。如果您不接受这些许可协议,请从您的设备中删除相关组件。 
已成功安装“Microsoft.OData.Edm 6.10.0”。 
正在安装“Microsoft.OData.Core 6.10.0”。 
您正在从 Microsoft Corporation 下载 Microsoft.OData.Core,有关此程序包的许可协议在 http://go.microsoft.com/?linkid=9809688 上提供。请检查此程序包是否有其他依赖项,这些依赖项可能带有各自的许可协议。您若使用程序包及依赖项,即构成您接受其许可协议。如果您不接受这些许可协议,请从您的设备中删除相关组件。 
已成功安装“Microsoft.OData.Core 6.10.0”。 
正在安装“Microsoft.AspNet.OData 5.5.0”。 
您正在从 Microsoft 下载 Microsoft.AspNet.OData,有关此程序包的许可协议在 http://www.microsoft.com/web/webpi/eula/net_library_eula_ENU.htm 上提供。请检查此程序包是否有其他依赖项,这些依赖项可能带有各自的许可协议。您若使用程序包及依赖项,即构成您接受其许可协议。如果您不接受这些许可协议,请从您的设备中删除相关组件。 
已成功安装“Microsoft.AspNet.OData 5.5.0”。 
正在从 ODataWebApplication 删除“Microsoft.AspNet.WebApi.Client.zh-Hans 5.0.0”。 
已成功将“Microsoft.AspNet.WebApi.Client.zh-Hans 5.0.0”从 ODataWebApplication 中删除。 
正在从 ODataWebApplication 删除“Microsoft.AspNet.WebApi.Core.zh-Hans 5.0.0”。 
已成功将“Microsoft.AspNet.WebApi.Core.zh-Hans 5.0.0”从 ODataWebApplication 中删除。 
正在从 ODataWebApplication 删除“Microsoft.AspNet.WebApi.Client 5.0.0”。 
已成功将“Microsoft.AspNet.WebApi.Client 5.0.0”从 ODataWebApplication 中删除。 
正在从 ODataWebApplication 删除“Newtonsoft.Json 5.0.6”。 
已成功将“Newtonsoft.Json 5.0.6”从 ODataWebApplication 中删除。 
正在将“Newtonsoft.Json 6.0.8”添加到 ODataWebApplication。 
已成功将“Newtonsoft.Json 6.0.8”添加到 ODataWebApplication。 
正在将“Microsoft.AspNet.WebApi.Client 5.2.3”添加到 ODataWebApplication。 
已成功将“Microsoft.AspNet.WebApi.Client 5.2.3”添加到 ODataWebApplication。 
正在从 ODataWebApplication 删除“Microsoft.AspNet.WebApi.Core 5.0.0”。 
已成功将“Microsoft.AspNet.WebApi.Core 5.0.0”从 ODataWebApplication 中删除。 
正在将“Microsoft.AspNet.WebApi.Core 5.2.3”添加到 ODataWebApplication。 
已成功将“Microsoft.AspNet.WebApi.Core 5.2.3”添加到 ODataWebApplication。 
正在将“Microsoft.Spatial 6.10.0”添加到 ODataWebApplication。 
已成功将“Microsoft.Spatial 6.10.0”添加到 ODataWebApplication。 
正在将“Microsoft.OData.Edm 6.10.0”添加到 ODataWebApplication。 
已成功将“Microsoft.OData.Edm 6.10.0”添加到 ODataWebApplication。 
正在将“Microsoft.OData.Core 6.10.0”添加到 ODataWebApplication。 
已成功将“Microsoft.OData.Core 6.10.0”添加到 ODataWebApplication。 
正在将“Microsoft.AspNet.OData 5.5.0”添加到 ODataWebApplication。 
已成功将“Microsoft.AspNet.OData 5.5.0”添加到 ODataWebApplication。 
正在将“Microsoft.AspNet.WebApi.Client.zh-Hans 5.2.3”添加到 ODataWebApplication。 
正在安装“Microsoft.AspNet.WebApi.Client.zh-Hans 5.2.3”。 
您正在从 Microsoft 下载 Microsoft.AspNet.WebApi.Client.zh-Hans,有关此程序包的许可协议在 http://www.microsoft.com/web/webpi/eula/net_library_eula_CHS.htm 上提供。请检查此程序包是否有其他依赖项,这些依赖项可能带有各自的许可协议。您若使用程序包及依赖项,即构成您接受其许可协议。如果您不接受这些许可协议,请从您的设备中删除相关组件。 
已成功安装“Microsoft.AspNet.WebApi.Client.zh-Hans 5.2.3”。 
已成功将“Microsoft.AspNet.WebApi.Client.zh-Hans 5.2.3”添加到 ODataWebApplication。 
正在将“Microsoft.AspNet.WebApi.Core.zh-Hans 5.2.3”添加到 ODataWebApplication。 
正在安装“Microsoft.AspNet.WebApi.Core.zh-Hans 5.2.3”。 
您正在从 Microsoft 下载 Microsoft.AspNet.WebApi.Core.zh-Hans,有关此程序包的许可协议在 http://www.microsoft.com/web/webpi/eula/net_library_eula_CHS.htm 上提供。请检查此程序包是否有其他依赖项,这些依赖项可能带有各自的许可协议。您若使用程序包及依赖项,即构成您接受其许可协议。如果您不接受这些许可协议,请从您的设备中删除相关组件。 
已成功安装“Microsoft.AspNet.WebApi.Core.zh-Hans 5.2.3”。 
已成功将“Microsoft.AspNet.WebApi.Core.zh-Hans 5.2.3”添加到 ODataWebApplication。 
正在卸载“Microsoft.AspNet.WebApi.Client.zh-Hans 5.0.0”。 
已成功卸载“Microsoft.AspNet.WebApi.Client.zh-Hans 5.0.0”。 
正在卸载“Microsoft.AspNet.WebApi.Core.zh-Hans 5.0.0”。 
已成功卸载“Microsoft.AspNet.WebApi.Core.zh-Hans 5.0.0”。 
正在卸载“Microsoft.AspNet.WebApi.Client 5.0.0”。 
已成功卸载“Microsoft.AspNet.WebApi.Client 5.0.0”。 
正在卸载“Newtonsoft.Json 5.0.6”。 
已成功卸载“Newtonsoft.Json 5.0.6”。 
正在卸载“Microsoft.AspNet.WebApi.Core 5.0.0”。 
已成功卸载“Microsoft.AspNet.WebApi.Core 5.0.0”。

PM>
Install-Package Microsoft.AspNet.OData

相关文章: