【问题标题】:MS Graph SDK 'List schemaExtensions' filtering syntax not working correctlyMS Graph SDK 'List schemaExtensions' 过滤语法无法正常工作
【发布时间】: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


    【解决方案1】:

    根据文档,您需要额外的参数:

    • 计数
    • 一致性级别

    除了过滤器。

    https://docs.microsoft.com/en-us/graph/query-parameters

    注意:

    另外,请注意根据讨论here,并非所有属性都支持endswith

    【讨论】:

    • 你也可以检查search是否适合你
    • 谢谢 Satya,我看到 MS Docs 链接中显示的过滤器/查询示例是针对 HTTP 请求的,我正在尝试在这里使用 Graph SDK,但事实证明 MS 文档太模糊了进一步讨论这个话题。我正在考虑只使用 HTTP 的想法,至少在过渡期间,我要弄清楚证明是否有效所需的过滤和分页功能。
    • SDK - 反过来传递一个http请求AFAIK...在查询选项中您可以根据需要添加上述参数是我的思考过程...
    猜你喜欢
    • 2013-09-15
    • 1970-01-01
    • 2015-02-14
    • 2013-08-16
    • 2012-11-16
    • 2011-04-06
    相关资源
    最近更新 更多