我有一个连接到实体框架以公开 DataServices 的 OData 端点,但我想在运行时根据一些元数据来塑造出来的数据,以使查询比 URL 更具限制性
例如:
http://services.odata.org/OData/OData.svc/Category(1)/Products ?$top=2&$orderby=name
如果这是位于欧洲的用户,我希望它返回具有“欧洲”区域的产品,但我宁愿 url 不必具有客户端提供的过滤器,例如:
http://services.odata.org/OData/OData.svc/Category(1)/Products $top=2&$orderby=name&$filter=Region eq 'Europe'
我发现查询拦截器可以用于这类事情,但它是一个适用于大量实体的所有查询的概念,所以我希望有一种更通用的方法将它应用于所有实体,而不是必须在每个实体上指定一个拦截器。
我还在考虑根据用户权限隐藏某些字段,例如,如果某个字段被标记为敏感,我可以根据是否允许用户查看敏感数据从查询或结果中动态删除该字段。我认为我上面描述的技术将是这两种情况的解决方案。
修改 url 可能会被命中和错过所以也许我可以访问表达式树 EF 创建并在它执行之前从中添加或删除项目?
以防万一它是相关的,我使用 DataService 基类来公开数据:
公共类 MyDataService : 数据服务
这既快速又简单,但可能难以实现我想要的
非常感谢任何帮助-即使它只是我要实现的目标的特定名称,也将有助于研究解决方案