ASP.NET Web API编程——使用Odata
路由配置
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的更多相关文章
- ASP.NET Web API中使用OData
在ASP.NET Web API中使用OData 一.什么是ODataOData是一个开放的数据协议(Open Data Protocol)在ASP.NET Web API中,对于CRUD(creat ...
- ASP.NET Web API编程——路由
路由过程大致分为三个阶段: 1)请求URI匹配已存在路由模板 2)选择控制器 3)选择操作 1匹配已存在的路由模板 路由模板 在WebApiConfig.Register方法中定义路由,例如模板默认生 ...
- 在ASP.NET Web API中使用OData
http://www.alixixi.com/program/a/2015063094986.shtml 一.什么是ODataOData是一个开放的数据协议(Open Data Protocol)在A ...
- 使用ASP.NET Web API 2创建OData v4 终结点
开放数据协议(Open Data Protocol[简称OData])是用于Web的数据访问协议.OData提供了一种对数据集进行CRUD操作(Create,Read,Update,Delete)的统 ...
- 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 API中使用OData的Action和Function
本篇体验OData的Action和Function功能.上下文信息参考"ASP.NET Web API基于OData的增删改查,以及处理实体间关系".在本文之前,我存在的疑惑包括: ...
- [转]使用ASP.NET Web API 2创建OData v4 终结点
本文转自:http://www.cnblogs.com/farb/p/ODataAspNetWebAPI.html 开放数据协议(Open Data Protocol[简称OData])是用于Web的 ...
- [转]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 ...
- ASP.NET Web API编程——构建api帮助文档
1 概要 创建ASP.NET Web Api 时模板自带Help Pages框架. 2 问题 1)使用VS创建Web Api项目时,模板将Help Pages框架自动集成到其中,使得Web Api项目 ...
随机推荐
- js设置下拉框选中后change事件无效解决
下拉框部分代码: <select id="bigType"> <option value="">请选择</option> & ...
- csharp: using OleDb Getting the identity of the most recently added record
/// <summary> /// 执行SQL语句,返回影响的记录数 /// </summary> /// <param name="SQLString&quo ...
- 如何检测页面是否有重复的id属性值
<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta nam ...
- iview中upload组件上传图片,跨域
前提:先前开发了一个A项目,A项目中有一套上传图片的接口,现在开发B项目. B项目开发中用iview中的upload组件上传图片,用到了A项目中上传接口,爬坑经历 1.涉及到了跨域解决:后台配置一下文 ...
- flex与相对定位在国内双核浏览器极速模式下的兼容性问题
在国内的浏览器中,360浏览器,QQ浏览器等绝大部分都是双核浏览器.双核浏览器即拥有IE兼容内核和非IE极速内核两个内核,分别对应兼容模式和极速模式.兼容模式时使用IE内核,极速模式采用webkit内 ...
- VS code 自定义快捷输入
本文是从简书复制的, markdown语法可能有些出入, 想看"正版"和更多内容请关注 简书: 小贤笔记 位置 ctrl+shift+p 搜索: snippets 输入类型: 比如 ...
- [Java]private, public,protected,friendly的区别(转载)一下子就记住了
http://teddyboy200382.blog.163.com/blog/static/320112002008825112549780/ 说明这四个关键字之前,我想就 class 之间的关系做 ...
- 解决Maven 报 Return code is: 400 , ReasonPhrase:Repository version policy: SNAPSHOT does not allow version: 2.1.0.RELEASE. 的错误
最近在搭建公司的基础框架,业务需求用到elasticsearch,所以需要整合到基础框架里,供各业务线使用同时也便于管理,但在整合的过程中,出现了莫名的问题,同时maven的提示也不够明确. 我的版本 ...
- Tesseract-OCR-04-使用 jTessBoxEditor 进行训练
Tesseract-OCR-04-使用 jTessBoxEditor 进行训练 本篇是关于 jTessBoxEditor 进行训练,使 Tesseract-OCR 文字识别准确率得到极大的提高,本篇完 ...
- 从数据库读取数据后将其输出成html标签
最常用的方法,使用JS或JQ JQ: $("#div").html("<span>我是HTML代码</span>"); JS: var ...