web api 2 学习笔记 (Odata ODataQueryOptions 使用)
2016-04-14 09:51
316 查看
[ODataRoutePrefix("products")] public class ProductController : BaseController { [ODataRoute("")] [EnableQuery(AllowedQueryOptions = Helper.ALLOW_QUERY | AllowedQueryOptions.Expand, MaxExpansionDepth = 5)] 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); } }
相关文章推荐
- 背水一战 Windows 10 (6) - 控件 UI: 字体的自动继承的特性, Style, ControlTemplate
- 63. Unique Paths II【M】【30】
- UISearchController
- 《iOS Human Interface Guidelines》——Icon and Image Sizes
- easyui layout 高度怎么自适应?
- 常用前端UI框架快速开发web项目
- request属性 request.getAttribute()
- Android 开源项目android-open-project解析之(四) ColorPickView,GraphView,UI Style,Other
- MERGE中使用SEQUENCE,带来的序列快速增长问题
- iOS (UIButton封装)仿糯米首页缩放“按钮”效果
- de_bruijn序列的一些补充
- uue enc.cpp
- uue dec.cpp
- Penguins DbTools数据库管理移植差分工具(EXCEL相关) ver 20160414
- NuGet在创建pack时提示”The replacement token 'author' has no value“问题解决
- 【7】mysql数据查询语言DQL(Data Query Language)②
- MVC中使用Ueditor
- iOS开发总结之项目开发中使用UITableView自定义多级表格&自定义cell
- StoryBoard中UIScrollView的滚动问题(contentsize)
- 数字信号传输理论 Nyquist准则