Microsoft graph api 为什么Microsoft Graph需要$select和$expand=扩展名?

Microsoft graph api 为什么Microsoft Graph需要$select和$expand=扩展名?,microsoft-graph-api,Microsoft Graph Api,在Graph Explorer中,当我进行身份验证并使用“获取开放扩展”示例时,它会对该端点执行get: https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail,mobilePhone&$expand=extensions 它返回我在“创建开放扩展”示例中添加的任何扩展。但是如果我删除$select参数,使端点看起来像这样 https://graph.microsoft.com/v1.0/me?$expand=ex

在Graph Explorer中,当我进行身份验证并使用“获取开放扩展”示例时,它会对该端点执行get:

https://graph.microsoft.com/v1.0/me?$select=id,displayName,mail,mobilePhone&$expand=extensions
它返回我在“创建开放扩展”示例中添加的任何扩展。但是如果我删除$select参数,使端点看起来像这样

https://graph.microsoft.com/v1.0/me?$expand=extensions
。。。然后,我得到一个错误,指出“类型为“microsoft.graph.user”的实体实例值没有属性“id”的值。“似乎我需要一个$select参数来返回扩展的扩展。不管$select值是什么-我可以使用一个与JSON负载中的任何字段都不对应的无意义字符串,它工作正常


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

我可以复制此参数,但
$select=fieldnotfound
除外。无论是否使用$select语句,我都会返回相同的错误。我无法解释为什么你会看到这种行为,但我可以提供一些关于这里出了什么问题的见解

首先介绍一下封面下发生的事情的背景

当您在没有附加参数的情况下调用
/me
时,将自动使用默认的
$select
参数。默认情况下,它使用以下内容:

$select=businessPhones、displayName、givenName、jobTitle、mail、mobilePhone、officeLocation、preferredLanguage、姓氏、userPrincipalName、id

如您所见,
id
实际上是所选字段之一。从理论上讲,只需添加
$expand=extensions
就可以正常工作。不幸的是,添加
$expand
似乎也会稍微改变底层
$select
语句中的字段。即,它会删除
id
字段:

$select=businessPhones、displayName、givenName、jobTitle、mail、mobilePhone、officeLocation、preferredLanguage、姓氏、userPrincipalName

但是,如果我同时使用specify(指定两者),它将按预期工作:

https://graph.microsoft.com/v1.0/me?$select=商务电话、displayName、givenName、职务、邮件、手机、办公地点、首选语言、姓氏、用户名、id&$expand=扩展名


我怀疑这是围绕默认字段select的一个错误,但我会听从Graph团队的意见。上述查询至少应允许您在此期间继续前进

嘿,道格,你能分享一下这个荒谬的字符串例子吗?我当然可以在select子句中放入无意义的字符串(这是一个bug),但它需要我显式地将id放入其中。嘿,Mark,下面是一个请求示例,它可以很好地返回我添加到用户节点的扩展名:如果我没有包含$select,我会遇到上面提到的错误,但是添加$select=fieldnotfound可以使它工作。