【发布时间】:2023-03-23 14:56:02
【问题描述】:
我正在阅读 MS Graph SDK 文档并在我的应用程序中构建一个具有搜索查询功能的列表视图。我还实现了无法正常工作的分页,因为 MS Graph 仅返回我的集合中的前两个扩展名(即使没有使用查询选项进行分页,如包含“top”和“skipToken”)
所以这里有两个问题要排序...
首先,在查看List schemaExtensions 的 MS Docs 时,他们建议“List schemaExtensions”方法支持 OData Query Parameters 以帮助自定义响应。
我可以使用的唯一过滤器两个过滤器是按所有者过滤,或按完整 Id 字符串过滤,示例如下所示:
var schemaExtensions = await graphClient.SchemaExtensions
.Request()
.Filter("owner eq 'myAppIdString'")
.GetAsync();
或者 - 我可以按扩展全名过滤:
var schemaExtensions = await graphClient.SchemaExtensions
.Request()
.Filter("id eq 'ext7bxc3e0l_appRoleTemplate'")
.GetAsync();
我主要想使用“endsWith”进行过滤,因为在使用选项创建未使用经过验证的域的扩展时,没有人会记住 Azure 为“Id”自动生成的随机前缀字符串.
我已经尝试了各种不同的方法来通过 endsWith 进行过滤,但是鉴于 MS 没有提供任何以这种方式进行过滤的示例,除了直接使用 Graph API 之外,我没有任何示例可以使用。
var schemaExtensions = await graphClient.SchemaExtensions
.Request()
.Filter("endsWith(id,'appRoleTemplate')") // Not working!
.GetAsync();
第二个问题是按所有者过滤扩展只会返回我的集合中的前两个扩展(我在测试中创建了 3qty)
如果我删除“按所有者过滤”,则会返回一长串来自其他应用/开发者的结果。如果我在 .request() 中为 'top' 和 'skipToken' 添加了一些查询选项,那么对结果进行分页可以正常工作,这就是我能够列出/返回我创建的第三个扩展的地方。
var queryOptions = new List<QueryOption>
{
new QueryOption("$top", rowsPerPage.ToString()) // rows per page = 10
};
if (!string.IsNullOrEmpty(skipToken))
{
queryOptions.Add(new QueryOption("$skiptoken", skipToken));
}
var schemaExtensions = await graphClient.SchemaExtensions
.Request(queryOptions)
.Filter("owner eq 'myAppIdString'")
.GetAsync(); // example allows paging but only returns the first two of three extensions on the first run.
如果我将 'top' 参数设置为 1,即一次返回 1qty 结果,那么这在使用分页时也可以正常工作,并且我可以分页到我创建的第三个扩展,但设置 'top ' 到 10 行时,按所有者过滤只会返回我集合中的前两个扩展名。
SDK 只会返回我自己的集合中的前两个扩展,这一事实让我认为 SDK 存在错误。但不确定在哪里报告此问题的最佳地点...
【问题讨论】:
标签: c# azure-active-directory azure-ad-graph-api microsoft-graph-sdks