zoukankan      html  css  js  c++  java
  • web api 2 学习笔记 (Odata ODataQueryOptions 使用)

    [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);
        }
    }
  • 相关阅读:
    Spring Boot 2 快速教程:WebFlux 集成 Thymeleaf(五)
    Spring Boot 2 快速教程:WebFlux 集成 Mongodb(四)
    程序兵法:Java String 源码的排序算法(一)
    oracle等待事件以及解决方案
    记一次数据库参数compatible降级[转]
    R中统计假设检验总结(一)
    Kriging插值法
    数学建模小练习(1):插值【转】
    C++11 lambda表达式
    C++11 正则表达式——基础知识介绍
  • 原文地址:https://www.cnblogs.com/keatkeat/p/5389957.html
Copyright © 2011-2022 走看看