[转]Asp.Net Web API 2第十七课——Creating an OData Endpoint in ASP.NET Web API 2(OData终结点)
本文转自:http://www.cnblogs.com/aehyok/p/3545824.html
前言
很久没更新博客了,加上刚过年,现在准备重新开战,继续自己的学习之路。本文已同步到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
[转]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 ...
- 如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites]
如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites] 一.布局页面介绍[Abo ...
- Asp.Net Web API 2(入门)第一课
Asp.Net Web API 2(入门)第一课 前言 Http不仅仅服务于Web Pages.它也是一个创建展示服务和数据的API的强大平台.Http是简单的.灵活的.无处不在的.你能想象到几乎 ...
- 使用ASP.NET Web Api构建基于REST风格的服务实战系列教程【九】——API变了,客户端怎么办?
系列导航地址http://www.cnblogs.com/fzrain/p/3490137.html 前言 一旦我们将API发布之后,消费者就会开始使用并和其他的一些数据混在一起.然而,当新的需求出现 ...
- 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 W ...
- Asp.Net Web API 2第七课——Web API异常处理
前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文主要来讲解Asp.Ne ...
- 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 ...
- Creating the Help Page in ASP.NET Web API
Introduction In this article we will define the process of creating the help page in the ASP .NET We ...
- [转]Web API Introduction to OData Services using ASP.NET Web API
本文转自:http://mahedee.net/tag/web-api/ What is OData? OData Stands for Open Data Protocol. It is a dat ...
随机推荐
- Windows 64位操作系统的ODBC
我的操作系统是windows server 2008 R2 X64,系统自带两个版本的ODBC管理器,在"运行"中输入下面内容分别调出他们: X64: C:\windows\sys ...
- 【maven】---初识
前言 最近在研究自动化测试,其中的一个研究点儿就是maven,去download了一本书,看了看.下面是自己的从书中摘录的一些关于maven的概念性的东西. 内容 maven是什么? Maven是一个 ...
- HTTP请求的两种方式get和post的区别
1,get从服务器获取数据:post向服务器发送数据: 2,安全性,get请求的数据会显示在地址栏中,post请求的数据放在http协议的消息体: 3,从提交数据的大小看,http协议本身没有限制数据 ...
- SQLMAP 基础操作
SQLMAP 基础操作 sudo git clone https://github.com/sqlmapproject/sqlmap GET 请求: -u POST 请求: Option: --dat ...
- word的xml文件中空白页和换页
■ word中分页符(插入空白页): <w:r> <w:rPr> <w:rFonts w:as ...
- PL/SQL数据开发那点事
PL/SQL开发那点事----->PL/SQL开发过程中异常处理 用户编写的PL/SQL块在执行过程中不可避免地要发生一些错误. 这里涉及的错误并不是由于程序的语法错误引起的,而是因为处理的数据 ...
- 提交app时候遇到IDFA警告
1.最近提交app时候遇到如下问题,解决方案: Everything has come to its usual state now. Simply upload your binary as you ...
- 分布式文件系统之FastDFS
环境引入: 在一个大型的教育官网,会拥有大量优质的视频教程,并且免费提供给用户去下载,文件太多如果高效存储?用户访问量大如何保证下载速度?分布式文件系统是解决这些问题的有效方法之一 一.什么是文件系统 ...
- mybatis的入门(一)
一.mybatis的介绍 mybatis是Apache的一个开源项目ibatis,2010年这个项目由apache software foundation 迁移到了google code,并且改名为M ...
- 128th LeetCode Weekly Contest Complement of Base 10 Integer
Every non-negative integer N has a binary representation. For example, 5 can be represented as &quo ...