webAPi OData的使用
一、OData介绍
开放数据协议(Open Data Protocol,缩写OData)是一种描述如何创建和访问Restful服务的OASIS标准。
二、OData 在asp.net mvc中的用法
1、在vs中新建webApi项目

2、添加测试类型
public class Product
{
public int Id { get; set; } public string ProductName
{
get; set;
}
}
3、开启EF自动迁移,添加EF上下文,
namespace ODataTest.Migrations
{
using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
using ODataTest.Models; internal sealed class Configuration : DbMigrationsConfiguration<ODataTest.Models.EFContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
} protected override void Seed(ODataTest.Models.EFContext context)
{
// This method will be called after migrating to the latest version. // You can use the DbSet<T>.AddOrUpdate() helper extension method
// to avoid creating duplicate seed data. }
}
}
public class EFContext : DbContext
{ static EFContext()
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<EFContext, Configuration>());
}
public EFContext() : base("DefaultConnection")
{
} public DbSet<Product> Products { get; set; }
}
4.在数据库添加一些测试数据
Id ProductName
21	产品1
22	产品2
23	产品3
24	产品4
5、在Controllers文件夹添加OData控制器

6、vs将自动生成基本的CURD,
将GetProducts方法的EnableQuery特性的AllowedQueryOptions属性设置为:允许所有查询AllowedQueryOptions.All
public class ProductsController : ODataController
{
private EFContext db = new EFContext(); // GET: odata/Products
[EnableQuery(AllowedQueryOptions = AllowedQueryOptions.All)]
public IQueryable<Product> GetProducts()
{
return db.Products;
} // GET: odata/Products(5)
[EnableQuery]
public SingleResult<Product> GetProduct([FromODataUri] int key)
{
return SingleResult.Create(db.Products.Where(product => product.Id == key));
} // PUT: odata/Products(5)
public IHttpActionResult Put([FromODataUri] int key, Delta<Product> patch)
{
Validate(patch.GetEntity()); if (!ModelState.IsValid)
{
return BadRequest(ModelState);
} Product product = db.Products.Find(key);
if (product == null)
{
return NotFound();
} patch.Put(product); try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!ProductExists(key))
{
return NotFound();
}
else
{
throw;
}
} return Updated(product);
} // POST: odata/Products
public IHttpActionResult Post(Product product)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
} db.Products.Add(product);
db.SaveChanges(); return Created(product);
} // PATCH: odata/Products(5)
[AcceptVerbs("PATCH", "MERGE")]
public IHttpActionResult Patch([FromODataUri] int key, Delta<Product> patch)
{
Validate(patch.GetEntity()); if (!ModelState.IsValid)
{
return BadRequest(ModelState);
} Product product = db.Products.Find(key);
if (product == null)
{
return NotFound();
} patch.Patch(product); try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!ProductExists(key))
{
return NotFound();
}
else
{
throw;
}
} return Updated(product);
} // DELETE: odata/Products(5)
public IHttpActionResult Delete([FromODataUri] int key)
{
Product product = db.Products.Find(key);
if (product == null)
{
return NotFound();
} db.Products.Remove(product);
db.SaveChanges(); return StatusCode(HttpStatusCode.NoContent);
} protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
} private bool ProductExists(int key)
{
return db.Products.Count(e => e.Id == key) > ;
}
}
7、在WebApiConfig类的Register方法里面注册OData路由
using System.Web.Http;
using System.Web.Http.OData.Builder;
using System.Web.Http.OData.Extensions;
using ODataTest.Models; ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Product>("Products");
config.Routes.MapODataServiceRoute("odata", "odata", builder.GetEdmModel());
8、运行网站就可以在浏览器就行OData的API测试
常用查询:
查询所有:http://localhost:64643/odata/Products
根据主键进行查询:http://localhost:64643/odata/Products(22) 【22为主键值】
相等查询:http://localhost:64643/odata/Products?$filter=ProductName eq '产品1'
只查询部分字段:http://localhost:64643/odata/Products?$select=Id
模糊查询(这个找了老半天):http://localhost:64643/odata/Products?$filter=substringof('品1',ProductName) eq true
还有更多的查询,参考,http://www.odata.org/documentation/odata-version-3-0/url-conventions/ ,在mvc中使用EF和OData基本能够满足所有的前端查询,有利于快速开发API查询接口
webAPi OData的使用的更多相关文章
- OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service & Client
		
一.概念介绍 1.1,什么是OData? 还是看OData官网的简单说明: An open protocol to allow the creation and consumption of quer ...
 - AspNet WebApi OData  学习
		
OData介绍:是一个查询和更新数据的Web协议.OData应用了web技术如HTTP.Atom发布协议(AtomPub)和JSON等来提供对不同应用程序,服务 和存储的信息访问.除了提供一些基本的操 ...
 - AspNet.WebAPI.OData.ODataPQ
		
AspNet.WebAPI.OData.ODataPQ实现WebAPI的分页查询服务 AspNet.WebAPI.OData.ODataPQ实现WebAPI的分页查询服务-(个人拙笔) AspNet. ...
 - AspNet.WebAPI.OData.ODataPQ实现WebAPI的分页查询服务-(个人拙笔)
		
AspNet.WebAPI.OData.ODataPQ 这是针对 Asp.net WebAPI OData 协议下,查询分页.或者是说 本人在使用Asp.Net webAPI 做服务接口时写的一个分页 ...
 - 主攻ASP.NET MVC4.0之重生:Asp.Net MVC WebApi OData
		
1.新建MVC项目,安装OData Install-Package Microsoft.AspNet.WebApi.OData -Version 4.0.0 2.新建WebAPI Controller ...
 - AspNet.WebAPI.OData.ODataPQ实现WebAPI的分页查询服务-(个人拙笔)(转)
		
出处:http://www.bubuko.com/infodetail-827612.html AspNet.WebAPI.OData.ODataPQ 这是针对 Asp.net WebAPI ODat ...
 - [转]Composite Keys With WebApi OData
		
本文转自:http://chris.eldredge.io/blog/2014/04/24/Composite-Keys/ In our basic configuration we told the ...
 - [转]OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service & Client
		
本文转自:http://www.cnblogs.com/bluedoctor/p/4384659.html 一.概念介绍 1.1,什么是OData? 还是看OData官网的简单说明: An open ...
 - 基于Angular+WebAPI+OData的增删改查
		
对于在ASP.NET WebAPI中怎么使用OData,已经在我前面的日志中的说明, 在ASP.NET Web API中使用OData 在这个示例中.我新建了一个Order的实体,在前端使用Angul ...
 
随机推荐
- appium安装完成后运行和执行python脚本的错误合集
			
1.第一个错误如下: main.js: error: argument "--app": Expected one argument. null 这个一般是appium服务端安装的 ...
 - package.json文件中dependencies和devDependencies的区别
			
在工作和学习中,我经常会用的npm 下载各种包,有时就会遇到各种npm 的形式,现在就捋一捋 首先要先了解 package.json文件中dependencies和devDependencies的 ...
 - 高手速成android开源项目【tool篇】
			
主要包括那些不错的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他. 一.依赖注入DI 通过依赖注入减少Vie ...
 - Runtime 自动化归档
			
Runtime的使用 (id)initWithCoder:(NSCoder *)decoder { if (self = [super init]) { unsigned ; Ivar *ivars ...
 - UNPIVOT
			
UNPIVOT UNPIVOT则相反,把数据从列旋转到行 SELECT * INTO product_vlues FROM ( SELECT NAME , ...
 - 喜大普奔,SITE4J网站上线啦
			
喜大普奔,SITE4J网站上线啦: 你懂的:https://peterchenhdu.club/
 - Zabbix4.2.0使用Python连接企业微信报警
			
目录 1. 配置企业微信 2. 脚本配置 2.1 安装python依赖的库 2.2 编写脚本 2. 搭建FTP 3. 配置Zabbix监控FTP 3.1 添加FTP模板 3.2 添加报警媒介 3.3 ...
 - Python中property的使用
 - InnoDB存储引擎--Innodb Buffer Pool(缓存池)
			
InnoDB存储引擎--Innodb Buffer Pool(缓存池) Innodb Buffer Pool的概念 InnoDB的Buffer Pool主要用于缓存用户表和索引数据的数据页面.它是一块 ...
 - c#实战开发:以太坊钱包对接私链 (二)
			
上一篇讲了 以太坊私链搭建 首先下载Ethereum Wallet 钱包 可以直接百度 下载如果直接打开它会默认连接公链 所以我们要通过命令打开 "F:\Program Files\Ethe ...