为什么Microsoft Graph需要$ select with $ expand = extensions?

时间:2017-06-15 04:57:43

标签: microsoft-graph

在Graph Explorer中,当我进行身份验证并使用"获取一个开放的扩展程序"示例,它对此端点执行GET:

https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail,mobilePhone&$expand=extensions

返回我用&#34添加的任何扩展程序;创建一个开放式扩展程序"样品。但是,如果我删除$ select参数,以便端点看起来像这样......

https://graph.microsoft.com/v1.0/me?$expand=extensions

...然后我收到一条错误,指出""类型' microsoft.graph.user'的实体实例值。没有财产的价值' id'。"看来我需要一个$ select参数来返回扩展的扩展。并且$ select值的含义并不重要 - 我可以使用与JSON有效负载中的任何字段都不对应的无意义字符串,并且它可以正常工作。

为什么在这种情况下需要$ select参数?

1 个答案:

答案 0 :(得分:0)

$select=fieldnotfound外,我能够复制此内容。我在使用或不使用$ select语句时返回相同的错误。我无法解释为什么你会看到这种行为,但我可以提供一些有关这里出现问题的见解。

首先介绍一下幕后发生的事情。

如果您在没有其他参数的情况下致电/me,则会自动使用默认的$select参数。默认情况下,它使用以下内容:

$select=businessPhones,displayName,givenName,jobTitle,mail,mobilePhone,officeLocation,preferredLanguage,surname,userPrincipalName,id

如您所见,id实际上是所选字段之一。理论上,简单地添加$expand=extentions应该按预期工作。不幸的是,添加$expand似乎也略微改变了基础$select语句中的字段。即,它会删除id字段:

$select=businessPhones,displayName,givenName,jobTitle,mail,mobilePhone,officeLocation,preferredLanguage,surname,userPrincipalName

如果我使用同时指定两者,它按预期工作:

https://graph.microsoft.com/v1.0/me?$select=businessPhones,displayName,givenName,jobTitle,mail,mobilePhone,officeLocation,preferredLanguage,surname,userPrincipalName,id&$expand=extensions

我怀疑这是一个关于默认字段选择的错误,但是我会按照图表团队的说法进行操作。上述查询至少应该允许您在此期间继续前进。