我似乎有一个不寻常的需求,我需要能够$expand对象,但我不能使用标准IQUeryable。
我使用EntityFramework和AutoMapper从数据库实体到API数据对象进行项目,然后通过OData公开这些数据对象。这有一个问题,那就是它限制了我所能做的事情--只限于那些AutoMapper可以ProjectTo的元素。
如果Api对象中的项是数据库的一部分,这通常不是问题。现在我有了一些对象,在这些对象中,我必须(有时是可选的)添加来自其他来源的数据。我们通常只讨论存储在内存中的数据(比如对象的错误细节,其中包括堆栈跟踪或一些运行时统计信息)。
因此,我需要找到一种方法来操作(筛选)查询,更重要的是--在单个实体GET操作中处理$expand (虽然对multi的支持也是受欢迎的,但在那里我可能可以使用ODataQueryDetails来处理这个问题)。
但是,对于单个项查询,我有一个如下形式的控制器方法:
Get (FromODataUri Guid密钥){
这使我根本无法访问ODataQueryDetails。在这种情况下,有人知道如何获取这些查询细节吗?
总的来说,"customize“元素的文档并不特别大--通常假定某人”只是在玩一些IQueryable接口“--而没有考虑到您可能需要进行多级处理,或者在内存和数据库数据中进行混合操作。
注意:Web :如何在单个实体上使用$expand?不是重复的--这是一个参数名称(键作为名称所需的)的单一问题,而且不够深入。
发布于 2016-04-21 03:06:44
如果您简单地向Get添加一个参数,如下所示,Web参数绑定将为该方法提供一个值。让Thing是控制器处理的实体类型。
public IHttpActionResult Get([FromODataUri] Guid key, ODataQueryOptions<Thing> opts)请注意,您需要指定ODataQueryOptions的泛型版本,否则会得到异常。
这将为您提供一个表示当前请求的查询选项的对象,但您将无法修改这些选项(所有有趣的属性都没有公共设置程序)。似乎有很多开发人员要求能够拦截和修改查询选项,但目前还没有现成的解决方案。请参阅当前针对5.1.0版本的关于Github的公开发行。有关在控制器方法中修改查询选项的当前最佳实践,请参见OData V4在服务器端修改$filter。
https://stackoverflow.com/questions/36721930
复制相似问题