[ODataRoutePrefix("products")]
public class ProductController : BaseController
{
[ODataRoute("")]
[EnableQuery(AllowedQueryOptions = Helper.ALLOW_QUERY | AllowedQueryOptions.Expand, MaxExpansionDepth = )]
public IHttpActionResult get(ODataQueryOptions<Product> queryOptions)
{
var url = "http://localhost:59853/api/products";
var query = S.ParseQueryString("");
query["$filter"] = "Id ge 2";
url += "?" + query.toQueryString();
var req = new HttpRequestMessage(HttpMethod.Get, url); //创建一个 请求 url + queryString
var myQueryOptions = new ODataQueryOptions(queryOptions.Context, req); 创建 ODataQueryOptions with request + EDM (这里我们使用原本的content EDM)
var queryable = myQueryOptions.ApplyTo(db.products) as IQueryable<Product>; //调用 ApplyTo,它就会对这个query进行处理然后返回一个新的query. 在controller里我们需要强转.
return Ok(queryable);
}
}

ODataQueryOptions 是让前段可以使用 $filter,$select 等来操控数据

它是配合整个请求来使用的。

上面看看我们在后台生产一个 ODataQueryOptions 的过程和使用它.

这东西不常用到。

我遇到的情况是如果要做一些权限,比如 $expand=colors , 而colors 有一些是当前用户不能访问的,那么我们可能需要增加一个filter $expand=colors($filter=OwnerId = 5) 假设当前用户 Id 是5.

也可以让 EnableQueryAttribute 在 ApplyQuery 是调用

public class MyEnableQueryAttribute : EnableQueryAttribute
{
public override IQueryable ApplyQuery(IQueryable queryable, ODataQueryOptions queryOptions)
{
//var url = "http://localhost:59853/api/products";
//var query = S.ParseQueryString("");
//query["$filter"] = "Id ge 2";
//url += "?" + query.toQueryString();
//var req = new HttpRequestMessage(HttpMethod.Get, url);
//var queryOptionsTwo = new ODataQueryOptions(queryOptions.Context, req);
//queryable = queryOptionsTwo.ApplyTo(queryable);
return queryOptions.ApplyTo(queryable);
}
}

web api 2 学习笔记 (Odata ODataQueryOptions 使用)的更多相关文章

  1. web api 2 学习笔记 (OData Batch request)

    之前介绍过OData 中实现RPC的写法,今天在来一个批量操作. 参考 : https://damienbod.wordpress.com/2014/08/14/web-api-odata-v4-ba ...

  2. Rest API 开发 学习笔记(转)

    Rest API 开发 学习笔记 概述 REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表示方式.获得这些表徵致使这些应用程序转变了其状态.随着 ...

  3. abp学习(四)——根据入门教程(aspnetMVC Web API进一步学习)

    Introduction With AspNet MVC Web API EntityFramework and AngularJS 地址:https://aspnetboilerplate.com/ ...

  4. Web Api系列教程第2季(OData篇)(二)——使用Web Api创建只读的OData服务

    前言 很久没更新了,之前有很多事情,所以拖了很久,非常抱歉.好了,废话不多说,下面开始正题.本篇仍然使用上一季的的项目背景(系列地址http://www.cnblogs.com/fzrain/p/34 ...

  5. JavaSE中线程与并行API框架学习笔记——线程为什么会不安全?

    前言:休整一个多月之后,终于开始投简历了.这段时间休息了一阵子,又病了几天,真正用来复习准备的时间其实并不多.说实话,心里不是非常有底气. 这可能是学生时代遗留的思维惯性--总想着做好万全准备才去做事 ...

  6. [转]Web Api系列教程第2季(OData篇)(二)——使用Web Api创建只读的OData服务

    本文转自:http://www.cnblogs.com/fzrain/p/3923727.html 前言 很久没更新了,之前有很多事情,所以拖了很久,非常抱歉.好了,废话不多说,下面开始正题.本篇仍然 ...

  7. 《ASP.NET MVC4 WEB编程》学习笔记------Web API 续

    目录 ASP.NET WEB API的出现缘由 ASP.NET WEB API的强大功能 ASP.NET WEB API的出现缘由 随着UI AJAX 请求适量的增加,ASP.NET MVC基于Jso ...

  8. 《ASP.NET MVC4 WEB编程》学习笔记------Web API

    本文截取自情缘 1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集 ...

  9. Asp.net core 学习笔记 ( OData )

    2018-12-10 更新 : 从前我都是把 entity 直接用于 odata 曝露 api 给程序用. 如果这个程序是我们自己写的前端,这样的方式非常好,因为就好比前端可以直接对数据库每一个表做操 ...

随机推荐

  1. Aggregation Models

    这是Coursera上<机器学习技法>的课程笔记. Aggregation models: mix or combine hypotheses for better performance ...

  2. JavaScript中判断对象类型的种种方法

    我们知道,JavaScript中检测对象类型的运算符有:typeof.instanceof,还有对象的constructor属性: 1) typeof 运算符 typeof 是一元运算符,返回结果是一 ...

  3. SKPhysicsJointSliding类

    继承自 NSObject 符合 NSCoding(SKPhysicsJoint)NSObject(NSObject) 框架  /System/Library/Frameworks/SpriteKit. ...

  4. java中基于TaskEngine类封装实现定时任务

    主要包括如下几个类: 文章标题:java中基于TaskEngine类封装实现定时任务 文章地址: http://blog.csdn.net/5iasp/article/details/10950529 ...

  5. tomcat7源代码Bootstrap

    tomcat的启动从bootstrap的main方法開始,在main方法中主要是做了三件事,调用init方法初始化自己.调用catalinaDaemon对象 的setAwait方法设置它的await属 ...

  6. CentOS 7 修改hostname

    centOS 7 里面修改hostname的方式有所改变,修改/etc/hosts和/etc/sysconfig/network两个文件已经不能生效.使用的新命令是 : hostnamectl set ...

  7. fork安全的gettid高效实现

    进程有id,可以通过getpid()获得,线程也有id,但是glibc没有提供封装.需要自己发出系统调用.在关键路径,系统调用还是对性能有影响的.因此我们可以想到类似glibc对getpid做的cac ...

  8. Linux命令之 文件归档管理

    1.文件相关知识 Linux怎样保存文件 数据 -这里数据就是文件的内容 元数据 -在linux系统中,所有与某个文件相关的额外信息都保存在一个叫做i-节点(inode)的节构中 文件名 -文件名保存 ...

  9. Java Criteria表关联查询(两个表未定义关联关系)

    Criteria criteria = this.getSession().createCriteria(Competition.class, "b"); DetachedCrit ...

  10. HTML中<b>标签和<strong>便签的区别

    最近碰到的问题,自己写的时候因为<b>标签比较简短偶尔使用,看到别人有使用<strong>标签的,本人不懂区别,在网上找的别人的东西,觉得很有道理,跟大家分享看看~~ 链接:h ...