ASP.NET 4.x Web Api Odata v4 backend modify query 修改查询

有时候我们会想给予权限添加 filter 到查询上.

比如 

会员和管理员都使用了 

/api/products 作为 product 查询

但是会员不应该可以看见还没有上架的货品 

/api/products?$filter=onMarket eq true 才是正确的

但是我们当然不可能把这个 $filter 交给前端去限制,因为这不安全嘛.

可惜的是 Web Api 并没有提供比较上层的接口去实现这个方法. 

我们有好些方法可以完成上面这个事情

比如在 controller return if(member) db.products.where(p => p.onMarket == true);

但是这个无法满足 expand + filter 的场景

所以最直观的做法就是, 修改请求的 query, 通过后端添加上 $filter 进去。这样就符合我们的预期了. 

refer : 

https://stackoverflow.com/questions/33660648/odata-v4-modify-filter-on-server-side
https://stackoverflow.com/questions/33126251/webapi-odata-pre-filtering-expand-queries
https://blogs.msdn.microsoft.com/odatateam/2014/07/04/tutorial-sample-using-odatauriparser-for-odata-v4/

原文地址:https://www.cnblogs.com/keatkeat/p/8594603.html