Asp.Net Web API 2第十七课——Creating an OData Endpoint in ASP.NET Web API 2(OData终结点)

原文:Asp.Net Web API 2第十七课——Creating an OData Endpoint in ASP.NET Web API 2(OData终结点)

前言

  很久没更新博客了,加上刚过年,现在准备重新开战,继续自己的学习之路。本文已同步到Web API2系列文章中http://www.cnblogs.com/aehyok/p/3446289.html

  示例项目下载地址http://pan.baidu.com/s/1sjEWVPN  

  开放数据协议(OData)是Web数据访问协议。OData提供了一种统一的方式来组织数据,查询数据,并通过操纵CRUD操作的数据集(创建,读取,更新和删除)。

  OData同时支持AtomPub(XML)和JSON格式。OData的还定义了一个方法来公开元数据有关的数据。客户端可以使用元数据来发现类型信息和关系的数据集。ASP.NET Web API OData可以很容易的创建OData终结点的数据集。您可以控制​​哪些操作的OData终结点支持。你可以托管多个的OData终结点,沿着非OData终结点。你可以完全的控制你的数据模型,后台业务逻辑和数据层。

  在本教程中,您将创建一个简单的可供客户端可以查询的OData终结点。您还可以创建一个C#客户端的终结点。本教程使用的Visual Studio2013。

创建 Visual Studio 项目

 在本教程中,您将创建支持基本的 CRUD 操作的OData 终结点。该终结点将公开一个单一的资源,一个产品的列表。以后的教程中将会添加更多的功能。

 选择合适的模版进行创建项目

 

并命名为OData,点击确认后,在下一个Asp.Net 项目对话框中选择 Empty的空模版,并在以下对象添加文件夹和核心引用下:进行勾选Web  API。

添加一个实体模型

 一个model就是在应用程序中展现数据的一个对象。在本教程中,我们需要一个展现产品的模型。这个模型对应着我们的OData的实体类型。

在解决方案资源管理器中,右键单击Models文件夹。从上下文菜单中,选择添加然后选择类。

添加相应的文件,并命名为Product。

在Product.cs文件中,添加如下类定义:

    public class Product
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
        public string Category { get; set; }
    }

ID属性为实体键。客户端可以通过ID来查询产品。此字段也是后台数据库中表的主键,之后进行生成项目的步骤。

添加一个OData的控制器

 控制器就是一个处理HTTP请求的类。在OData服务中你为每个实体数据集定义一个独立的控制器。在本教程中我们将创建一个单一的控制器。

在解决方案资源管理器中,右键单击控制器文件夹。选择添加,然后选择控制器.

在添加支架的对话框中,选择一个OData的模版,如下图所示。

 在添加控制器对话框中,命名控制器名称为ProductsController。选择“使用异步控制器操作”。在模型类下拉菜单中选择Product。  

 

然后点击上面的“新建数据上下文”

  

并命名为ProductServiceContext。

然后将可以看到会在项目中添加两个文件:

 

添加EDM和Route

在解决方案资源管理器中,打开App_Start文件夹,然后找到WebApiConfig.cs文件并打开。用下面的代码进行替换之前默认的配置代码。

        public static void Register(HttpConfiguration config)
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            builder.EntitySet<Product>("Products");
            config.Routes.MapODataRoute("odata", "odata", builder.GetEdmModel());
        }

这个代码处理了两个问题:

1、为OData终结点创建一个数据实体模型(EDM)。

2、为OData终结点添加一个路由。

EDM是一个抽象的数据模型。EDM用于创建元数据文件和定义服务的URIs.ODataConventionModelBuilder 通过使用一组默认的EDM命名约定来创建 EDM。这种方法需要最少的代码。如果你想更多的来控制EDM,使用ODataModelBuilder类明确的添加属性、键、导航属性来创建EDM。

这个EntitySet 方法就是将一个实体添加到EDM实体中。

modelBuilder.EntitySet<Product>("Products");

字符串Products定义的是这个实体集的名称。控制器的名称必须匹配实体集的名称。在这个教程中,这个实体集的名称被命名为”Products“,这个控制器被命名为ProductsController。如果你命名这个实体集为”ProductSet“,那么你将需要把控制器命名为”ProductSetController“。请注意一个终结点可以包含多个实体集。为每个实体集调用EntitySet<T>,然后定义一个合适的控制器。

MapODataRoute 方法为OData终结点添加一个路由。

config.Routes.MapODataRoute("ODataRoute", "odata", model);

第一个参数是一个路由的名称。你的服务的客户端看不到这个名称的。第二个参数是终结点URL的前缀。鉴于这些代码,针对产品实体集的URL是http://hostname/odata/Products。你的应用程序可能会有超过一个的OData终结点。对于每一个终结点,调用MapODataRoute 方法,提供一个唯一的路由名称和一个唯一的URL前缀。

Seed the Database (可选的)

  在这一步骤中,您将使用EF框架来插入数据库中一些测试数据。这一步是可选的,但是它能让你立刻测试出OData终结点。

从工具菜单中找到如下

 

 

并键入如下命名:

Enable-Migrations

这将添加一个Migrations 的文件夹,并有一个Configuration.cs的文件

 

打开Configuration.cs,在Seed方法中添加如下的代码:

        protected override void Seed(OData.Models.ProductServiceContext context)
        {
            context.Products.AddOrUpdate(new Product[] {
                new Product() { ID = 1, Name = "Hat", Price = 15, Category = "Apparel" },
                new Product() { ID = 2, Name = "Socks", Price = 5, Category = "Apparel" },
                new Product() { ID = 3, Name = "Scarf", Price = 12, Category = "Apparel" },
                new Product() { ID = 4, Name = "Yo-yo", Price = 4.95M, Category = "Toys" },
                new Product() { ID = 5, Name = "Puzzle", Price = 8, Category = "Toys" },
            });
        }

然后再在软件包管理器控制台窗口,输入以下命令,并顺序执行两个命令:

Add-Migration Initial
Update-Database

测试OData终结点

 在这一部分,我们将使用 Fiddler Web Debugging 来发送请求到终结点来检测响应消息。这将帮助您去理解OData终结点的功能。

在Visual Studio中,按F5进行运行程序。

 

1、然后在Fiddler中http://localhost:3629/Odata/Products,获得产品列表

点击执行

 

2、为了得到元数据文件,可以发送请求如下http://localhost:3629/odata/$metadata,直接通过浏览器

 

3、为了通过ID来获取某一个实体http://localhost:3629/Odata/Products(1)

4、可以发现默认得到的数据格式是JSON格式的,下面我们来设置一个xml格式的。

得到如下数据

 

5、再换一个数据格式application/json;odata=verbose

得到数据如下

总结

这是执行程序调用上下文之后产生的数据库文件。直接生成在项目中,进行添加即可。

示例项目下载地址http://pan.baidu.com/s/1sjEWVPN

本文参考地址http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/creating-an-odata-endpoint

时间: 2024-09-09 19:42:36

Asp.Net Web API 2第十七课——Creating an OData Endpoint in ASP.NET Web API 2(OData终结点)的相关文章

Asp.Net Web API 2第十三课——ASP.NET Web API中的JSON和XML序列化

原文:Asp.Net Web API 2第十三课--ASP.NET Web API中的JSON和XML序列化 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文描述ASP.NET Web API中的JSON和XML格式化器. 在ASP.NET Web API中,媒体类型格式化器(Media-type Formatter)是一种能够做以下工作的对象: 从HTTP消息体读取

Asp.Net Web API 2第四课——HttpClient消息处理器

原文:Asp.Net Web API 2第四课--HttpClient消息处理器 Asp.Net Web API 导航   Asp.Net Web API第一课:入门http://www.cnblogs.com/aehyok/p/3432158.html       Asp.Net Web API第二课:CRUD操作http://www.cnblogs.com/aehyok/p/3434578.html       Asp.Net Web API第三课:.NET客户端调用Wep API http

Asp.Net Web API 2第五课——Web API路由

原文:Asp.Net Web API 2第五课--Web API路由 Asp.Net Web API 导航   Asp.Net Web API第一课--入门 http://www.cnblogs.com/aehyok/p/3432158.html       Asp.Net Web API第二课--CRUD操作 http://www.cnblogs.com/aehyok/p/3434578.html       Asp.Net Web API第三课--.NET客户端调用Web API http:

Asp.Net Web API 2第十一课——在Web API中使用Dependency Resolver

原文:Asp.Net Web API 2第十一课--在Web API中使用Dependency Resolver 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文主要来介绍在Asp.Net Web API使用Web API的Decpendency Resolver在控制器中如何注入依赖. 本文使用VS2013.本文的示例代码下载链接为http://pan.baidu.

Asp.Net Web API 2第六课——Web API路由和动作选择

原文:Asp.Net Web API 2第六课--Web API路由和动作选择 Asp.Net Web API 导航       Asp.Net Web API第一课--入门http://www.cnblogs.com/aehyok/p/3432158.html       Asp.Net Web API第二课--CRUD操作http://www.cnblogs.com/aehyok/p/3434578.html       Asp.Net Web API第三课--.NET客户端调用Web AP

Asp.Net Web API 2第十课——使用OWIN自承载Web API

原文:Asp.Net Web API 2第十课--使用OWIN自承载Web API 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本教程主要来展示在控制台应用程序中如何通过OWIN来承载Web API. Open Web Interface for .NET (OWIN)在Web服务器和Web应用程序之间建立一个抽象层.OWIN将网页应用程序从网页服务器分离出来,然后将

一个创建 OData 的新选项: Web API

早在 OData 规范出现以前,Microsoft .NET 开发人员就已能够创建 OData 源.借助 WCF 数据服务,可使用具象状态传输 (REST) 在 Web 上公开实体数据模型 (EDM).换句话说,可 经由以下 HTTP 调用使用这些服务: GET.PUT.DELETE 等.随着创建这些服务的框架的发 展(中途数次更改名称),输出也在不断演变,并最终形成以 OData 规范 (odata.org) 封装的形态.目前已出现多种可使用 OData 的 客户端 API,来源如 .NET.

《精通 ASP.NET MVC 3 框架(第三版)》---- 1.2 当今的Web开发

1.2 当今的Web开发 精通 ASP.NET MVC 3 框架(第三版) 除微软之外,自Web Form首次发布以来,Web开发技术发展迅速,这表现在几个不同的方向.除了已经提及的AJAX之外,还有一些其他的主要发展. 1.2.1 Web标准与REST 近些年来,向Web标准兼容的趋势已在增强.Web网站建立在比以往更广泛的设备和浏览器之上,Web标准(HTML.CSS.JavaScript等)使人们有望能够在任何地方--甚至在可联网的冰箱上--都可以有相当好的浏览体验.现代Web平台不可忽视

ASP.NET MVC是如何运行的[1]: 建立在“伪”MVC框架上的Web应用

ASP.NET由于采用了管道式设计,具有很好的扩展性,而整个ASP.NET MVC应用框架就是通过扩展ASP.NET实现的.通过上面对ASP.NET管道设计的介绍,我们知道ASP.NET的扩展点只要体现在HttpMoudle和HttpHandler这两个核心组建之上,实际上整个ASP.NET MVC框架就是通过自定义的HttpMoudle(UrlRoutingModule)和HttpHandler(MvcHandler)实现的.为了上读者从整体上把握ASP.NET MVC的工作机制,接下来我按照