路由配置

routePrefix路由前缀,必须含有Odata字符串,否则路由不到Odata控制器。

V1表示版本,可以使用这种方式进行版本控制,也可以使用其他方式。

config.Count().Filter().OrderBy().Expand().Select().MaxTop(null);这样配置使Odata操作符可用(Web Api2的旧版本不必如此设置)。

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
//odata路由
config.MapODataServiceRoute(
routeName: "V1OdataRouteVersioning",
routePrefix: "Odata/V1",
model: GetEdmModel());
config.Count().Filter().OrderBy().Expand().Select().MaxTop(null);
config.AddODataQueryFilter();
}
}

EDM模型配置

实体名称为Collection,控制器名称为CollectionsV1Controller,Action名称为AddCollection,collectionBM为方法参数名称。Function名称为GetCollection,Function返回数据类型为CollectionDTO,Function参数名为userId。使用ODataConventionModelBuilder.Namespace定义命名空间,他是请求URI的一部分。

public class CollectionsV1Controller : ODataController
{
[EnableQuery]
[HttpGet]
public List<CollectionDTO> GetCollection(int userId)
{
return CollectionBLL.GetCollection(userId);
} [HttpPost]
public int AddCollection(CollectionBindingModel collectionBM)
{
return CollectionBLL.AddCollection(collectionBM);
}
} private static IEdmModel GetEdmModel()
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
       var collectionSet = builder.EntitySet<Collection>("Collections").EntityType.Collection;
var getCollectionFunction = collectionSet.Function("GetCollection").Returns<CollectionDTO>();
getCollectionFunction.Parameter<int>("userId"); collectionSet.Action("AddCollection").Returns<int>().Parameter<CollectionBindingModel>("collectionBM"); var deleteCollectionFunction = collectionSet.Function("DeleteCollection").Returns<int>();
       deleteCollectionFunction.Parameter<int>("collectionUserId");
       builder.Namespace = "Service";
return builder.GetEdmModel();
}

控制器与控制器方法

控制器继承自ODataController,ODataController上有[ApiExplorerSettings(IgnoreApi = true)]

,[ODataFormatting],[ODataRouting]这三个特性,由于[ApiExplorerSettings(IgnoreApi = true)]

的影响,在System.Web.Http.Description.ApiDescription实例中不包含继承自ODataController的控制器;控制器方法使用了[EnableQuery]修饰后才可支持Odata操作符。

自定义方法的方式有两种,使用EntityCollectionConfiguration<TEntityType>.Action或EntityCollectionConfiguration<TEntityType>.Function。

使用EntityCollectionConfiguration<TEntityType>.Action定义的控制器方法可以通过body体传参;

使用EntityCollectionConfiguration<TEntityType>.Function定义的控制器方法可以通过url传参,但url写法值得注意,例如:http://localhost/HY_WebApi/Odata/V1/Collections/Service.GetCollection(userId=3),注意这里使用了括号将参数括起来,而不是“?userId=3”这种格式

使用Action,不支持HttpGet方式,仅支持HttpPost方式。

Function仅支持HttpGet方式,不支持HttpPost方式。

ASP.NET Web API编程——使用Odata的更多相关文章

  1. ASP.NET Web API中使用OData

    在ASP.NET Web API中使用OData 一.什么是ODataOData是一个开放的数据协议(Open Data Protocol)在ASP.NET Web API中,对于CRUD(creat ...

  2. ASP.NET Web API编程——路由

    路由过程大致分为三个阶段: 1)请求URI匹配已存在路由模板 2)选择控制器 3)选择操作 1匹配已存在的路由模板 路由模板 在WebApiConfig.Register方法中定义路由,例如模板默认生 ...

  3. 在ASP.NET Web API中使用OData

    http://www.alixixi.com/program/a/2015063094986.shtml 一.什么是ODataOData是一个开放的数据协议(Open Data Protocol)在A ...

  4. 使用ASP.NET Web API 2创建OData v4 终结点

    开放数据协议(Open Data Protocol[简称OData])是用于Web的数据访问协议.OData提供了一种对数据集进行CRUD操作(Create,Read,Update,Delete)的统 ...

  5. 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 ...

  6. 在ASP.NET Web API中使用OData的Action和Function

    本篇体验OData的Action和Function功能.上下文信息参考"ASP.NET Web API基于OData的增删改查,以及处理实体间关系".在本文之前,我存在的疑惑包括: ...

  7. [转]使用ASP.NET Web API 2创建OData v4 终结点

    本文转自:http://www.cnblogs.com/farb/p/ODataAspNetWebAPI.html 开放数据协议(Open Data Protocol[简称OData])是用于Web的 ...

  8. [转]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 API ...

  9. ASP.NET Web API编程——构建api帮助文档

    1 概要 创建ASP.NET Web Api 时模板自带Help Pages框架. 2 问题 1)使用VS创建Web Api项目时,模板将Help Pages框架自动集成到其中,使得Web Api项目 ...

随机推荐

  1. 企业为什么需要实施BPM?

    背景:众所周知,近几年企业信息化发展迅速,业务管理系统从大到小,数量众多,如ERP,SCM,PLM,CRM,EHR,OA,BI…… 等,企业的管理人员进行管理的主要手段是通过各个业务系统获得各种管理报 ...

  2. 一:Maven知识整理

    一:maven的好处 1.依赖管理:对jar包的统一管理 可以节省空间 2.项目一键构建: 编码 编译 测试(junit) 运行 打包 部署 一个 tomcat:run就能把项目运行起来 Maven能 ...

  3. Activiti工作流小序曲

    一般涉及到OA.ERP等公司办公系统都必须有一套办公流程,这时候使用activiti工作流框架会大大减轻我们的工作量,提高我们的开发效率. Activiti工作流简单介绍: 工作流(workflow) ...

  4. zookeeper【4】master选举

    考虑7*24小时向外提供服务的系统,不能有单点故障,于是我们使用集群,采用的是Master+Slave.集群中有一台主机和多台备机,由主机向外提 供服务,备机监听主机状态,一旦主机宕机,备机必需迅速接 ...

  5. 【原创】Hadoop的IO模型(数据序列化,文件压缩)

    数据序列化 我们知道,数据在分布式系统上运行程序数据是需要在机器之间通过网络传输的,这些数据必须被编码成一个个的字节才可以进行传输,这个其实就是我们所谓的数据序列化.数据中心中,最稀缺的资源就是网络带 ...

  6. 编写简单的maven插件

    编写一个简单的输出maven的hello world的插件 1.在eclipse中新建一个maven project项目 然后取名HelloPlugin,建立后,pom文件为(注意packaging为 ...

  7. 打印thinkphp中的sql语句

    var_dump($repair->fetchSql(true)->where(array('cuername' =>$cuername))->order('applytime ...

  8. bzoj2119 股市的预测

    传送门 感觉智商莫名其妙的就变低了……写这题的时候死活想不出来…… 做法其实不难…… 题目要求形如ABA的串的个数,我们可以枚举A的长度,利用标记关键点的方法统计答案.设枚举到的答案为k,每k个点标记 ...

  9. (1-3)line-height与图片的表现

    (1-3)line-height与图片的表现 这篇文章真的很重要,耐心看,重中之重. 一.行高和图片的表现 图片和行高有什么歪腻呢?? 很多人不明白,为什么我图片好好的放在一个标签里面它就出现了如下问 ...

  10. 子div设置float后会导致父div无法自动撑开

    本文是从简书复制的, markdown语法可能有些出入, 想看"正版"和更多内容请关注 简书: 小贤笔记 注: 文章部分转载 彩泉 - 博客园 原因:内部的DIV因为float:l ...