【发布时间】:2018-09-26 05:32:18
【问题描述】:
这个问题以前是在here 上发布的,但我在这里重复这个问题和讨论的摘要,以获得一个完整的问题。
我在 ASP.NET WebAPI 中设置了一个 ODataController,并使用 DocumentDB/CosmosDB 作为后端。它工作得很好,我返回了 CreateDocumentQuery 的结果,$select、$top、$orderby 和 $filter 工作正常。
但是,$skip 没有。我知道这是一个计划中的功能(投票here),但我想知道是否有任何临时解决方法。
我的计划是为我的 OData 控制器操作添加一个“continuationToken”参数。然后,我将使用 FeedOptions.RequestContinuation 将其传递给 CreateDocumentQuery。但是,CreateDocumentQuery 不返回响应令牌。然后我尝试使用 ReadDocumentFeedAsync,它确实返回一个响应令牌,但它不返回一个 IQueryable。
这是一个 ODataController 中的 api 代码示例:
public IQueryable<Result> FindResults(Uri collectionUri, string continuationToken)
{
FeedOptions feedOptions = new FeedOptions();
feedOptions.MaxItemCount = 100;
feedOptions.RequestContinuation = continuationToken;
var query = client.CreateDocumentQuery<Result>(collectionUri, queryString, feedOptions).AsDocumentQuery();
return query as IQueryable<Result>;
}
但是,客户端代码会是什么样子? IE。保持 IQueryable 活动以能够在分页时使用 continuationToken 所需的 http 请求是什么? 我想我可以将 ReadDocumentFeedAsync 的结果存储在内存中并返回一个 IQueryable,但是有更好的解决方案吗?
【问题讨论】:
-
我也有类似的情况。你有什么解决办法吗?如果有,可以分享一下吗?
-
很遗憾,目前还没有解决方案。我没有时间再看它,但如果我找到解决方案,我会在这里发帖。
标签: asp.net-web-api odata azure-cosmosdb