OData v4 - Web API 轻量级应用(无Entity Framwork)

翻译 2015年07月06日 17:07:52

本文讲述的是简单的Web API OData使用。一般的,OData应用需要使用到Entity Framwork和database server来实现datasource,在本文中,为了快速的实现OData service,本文使用了in-memory data作为datasource。以下是创建过程。

solution 全览


创建solution

File->new>Project>Web->Web Application  重命名

安装NuGet包

  • 方法一:运行tools->NuGet package manager->Package manager console
PM> Install-Package Microsoft.AspNet.OData
  • 方法二:solution下面的References右键Manage NuGet packages ,online查询并安装odata应用包

创建Models

在Models文件夹下创建两个model class, 分别是Person.cs 和Trip.cs,其中Person model能够前往(navigate to)Trips.

public class Person
    {
        [Key] //from System.ComponentModel.DataAnnotations meaning the property is key
        public String ID { get; set; }
        [Required]  // from System.ComponentModel.DataAnnotations meaning the property is required seperately.
        public String Name { get; set; }
        public String Description { get; set; }
        public List<Trip> Trips { get; set; }
    }
public class Trip
    {
        [Key]
        public String ID { get; set; }
        [Required]
        public String Name { get; set; }
    }

In-Memory dataSource实现

添加DataSource file->添加DemoDataSources.cs

 public class DemoDataSources
    {
        private static DemoDataSources instance = null;
        public static DemoDataSources Instance
        {
            get { return instance ?? (instance = new DemoDataSources()); }
        }
        public List<Person> People { get; set; }
        public List<Trip> Trips { get; set; }
        private DemoDataSources()
        {
            this.Reset();
            this.Initialize();
        }
        public void Reset()
        {
            this.People = new List<Person>();
            this.Trips = new List<Trip>();
        }
        public void Initialize()
        {  //initialize trips
            this.Trips.AddRange(new List<Trip>(){
                new Trip(){
                    ID = "0",
                    Name = "Trip 0"
                },
                new Trip(){
                    ID = "1",
                    Name = "Trip 1"
                },
                new Trip(){
                    ID = "2",
                    Name = "Trip 2"
                }
            });
            //initialize people
            this.People.AddRange(new List<Person>(){
                new Person(){
                    ID = "001",
                    Name = "Demi",
                    Trips = new List<Trip>{Trips[0], Trips[1]}
                },
                new Person(){
                    ID = "002",
                    Name = "Claire",
                    Description = "This is a beautiful girl!",
                    Trips = new List<Trip>{Trips[1], Trips[2],Trips[0]}
                }
            });
        }
    }


添加controllers

前面model中有两个entity set(实体集),在这里我们就需要对应创建两个controller,分别是PeopleController.cs和TripsController.cs。本文中只是给出了简单的Get查询方法,也可以增加其他的Odata操作方法,并且实现方法与使用EF实现的DataSource中类似。

[EnableQuery]
    public class PeopleController : ODataController
    {
        public IHttpActionResult Get()
        {
            return Ok(DemoDataSources.Instance.People.AsQueryable());
        }
    }
[EnableQuery]
    public class TripsController : ODataController
    {
        public IHttpActionResult Get()
        {
            return Ok(DemoDataSources.Instance.Trips.AsQueryable());
        }
    }

配置endpoint

public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            //config.MapHttpAttributeRoutes();

            //config.Routes.MapHttpRoute(
                //name: "DefaultApi",
                //routeTemplate: "api/{controller}/{id}",
               // defaults: new { id = RouteParameter.Optional }
            //);

            config.MapODataServiceRoute("odata", null, GetEdmModel(), new DefaultODataBatchHandler(GlobalConfiguration.DefaultServer));
            config.EnsureInitialized();

        }

        private static IEdmModel GetEdmModel()
        {
            var builder = new ODataConventionModelBuilder {Namespace = "Demos", ContainerName = "DefaultContainer"};
            builder.EntitySet<Person>("People");
            builder.EntitySet<Trip>("Trips");
            var edmModel = builder.GetEdmModel();
            return edmModel;
        }

运行效果

所有的GET方法

http://localhost:26388 - service document

http://localhost:26388/$metadata - service metadata

http://localhost:26388/People - get all

http://localhost:26388/People?$filter=contains(Description,'girl') - filter

http://localhost:26388/People?$select=Name - select

http://localhost:26388/People?$expand=Trips - expand








web api示例

上篇博客讲解rest服务开发时,曾经提到过asp.net mvc中的rest api,由于篇幅原因,没有在上篇博客中进行讲解,这里专门拿出来进行讨论。还是一样引用上次的案例,用asp.net mv...
  • niewq
  • niewq
  • 2014年05月04日 22:29
  • 14573

陨石坑之webapi使用filter

首先为什么说这是一个坑,是因为我们在webapi中使用filter的时候也许会先百度一下,好吧,挖坑的来了,我看了好几篇文章写的是使用System.Web.Mvc.Filters.ActionFilt...
  • winnyrain
  • winnyrain
  • 2017年03月28日 14:11
  • 578

VS2015 使用ODataV4创建Web Api和OData客户端

OData - Open Data Protocol,是一个设计和使用RESTful API的标准。REST本身只是一个构建web服务的思想和理念,其没有规定一个统一的标准来限制开发人员该如何设计RE...
  • wdeng2011
  • wdeng2011
  • 2017年10月18日 17:04
  • 270

如何建立与Olingo V4 OData服务

第1部分:阅读场景 本教程将指导您完成编写基于该Olingo的OData 4.0库的Java OData服务所需的步骤(基于当前Olingo 4.0.0它可以通过获取下载页)。 最终的源代码可以在...
  • limm33
  • limm33
  • 2016年08月25日 13:47
  • 2834

Fiori2.0学习笔记-OData的应用

对OData进行筛选和过滤操作
  • weixin_41012753
  • weixin_41012753
  • 2017年11月29日 16:24
  • 101

让Web API支持OData查询

前言   OData 这词也算是目前热门的词汇之一,而在 ASP.NET Web API 中也支持了 OData 查询服务,本篇就来看看如何在 Web API 中加入 OData 来进行操作。 ...
  • zzy7075
  • zzy7075
  • 2015年06月07日 10:27
  • 1362

SAP OData服务调用之C#篇

SAP OData服务调用之C#篇 版本:V1.0 编写人:杨大山 日期:2018-01-11   目 录 一、 认识ODATA 3 二、 常见异常 3 1、 远程服...
  • bushuaibucai
  • bushuaibucai
  • 2018年01月11日 17:45
  • 43

OData demo 2

OData/search/filter/format/gridtable
  • wycsnx
  • wycsnx
  • 2017年07月27日 13:38
  • 203

OData Version 4.0 URL

OData Version 4.0. Part 2: URL ConventionsPlus Errata 03 Additional artifacts: This prosespecifi...
  • limm33
  • limm33
  • 2016年09月01日 23:33
  • 791

快速搭建Web Api OData V4服务端

VS2015可以自动化搭建Web Api OData V3服务端,但是不能自动化搭建OData V4服务端。微软官网给出了一个例程,https://docs.microsoft.com/en-us/a...
  • woodsun2008
  • woodsun2008
  • 2017年06月12日 21:06
  • 602
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OData v4 - Web API 轻量级应用(无Entity Framwork)
举报原因:
原因补充:

(最多只允许输入30个字)