You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MS Graph获取用户带$expand=extensions返回500错误,单独获取正常求原因

调用MS Graph带$expand=extensions触发InternalServerError的原因分析

我之前也碰到过类似的问题,结合你的场景来看,这个错误的核心问题出在用户扩展的关联性上,咱们一步步拆解:

首先明确你的场景:

  • 只通过用户ID调用MS Graph获取用户信息时完全正常,代码没问题:
const { data: response } = await axios.get(`${ MS_GRAPH_USER_API }/${ id }`, { headers: { Authorization: `Bearer ${ TOKEN }`, "Content-Type": "application/json" } })
  • 但加上$expand=extensions参数后就报错,错误提示是**"类型为'microsoft.graph.user'的实体实例值没有'id'属性的值"**,调用代码:
const { data: response } = await axios.get(`${ MS_GRAPH_USER_API }/${ id }?$expand=extensions`, { headers: { Authorization: `Bearer ${ TOKEN }`, "Content-Type": "application/json" } })

错误响应内容如下:

data: '{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#users(extensions())/$entity"{\r\n' + ' "error": {\r\n' + ' "code": "InternalServerError",\r\n' + "message": "类型为'microsoft.graph.user'的实体实例值没有'id'属性的值。要计算实体的元数据,必须提供其键和并发令牌属性值。",\r\n' + ' "innerError": {\r\n' + ' "date": "2020-12-19T09:51:26",\r\n' + ' "request-id": "93cf5d97-0096-4769-871e-f8fcf7cd17c3",\r\n' + ' "client-request-id": "93cf5d97-0096-4769-871e-f8fcf7cd17c3"\r\n' + ' }\r\n' + ' }\r\n' + '}'

错误原因拆解

这个内部错误本质是Graph在关联用户实体和扩展实体时出了问题:
当你用$expand=extensions拉取扩展时,Graph需要把用户的id作为主键,和每个扩展记录里绑定的用户标识做关联。如果你的某个扩展记录存在以下情况,就会触发这个错误:

  • 扩展记录里没有正确存储关联的用户id(比如关联字段为空);
  • 扩展记录里的用户id格式无效(比如不是合法的GUID格式);
  • 扩展在创建时没有正确绑定到这个用户,导致Graph无法找到关联的主键。

排查和解决建议

  • 先单独检查用户的扩展列表:直接调用GET https://graph.microsoft.com/v1.0/users/{id}/extensions,查看返回的所有扩展记录,重点看每个扩展的标识信息,有没有空值或者格式异常的条目;
  • 清理异常扩展:如果发现有问题的扩展记录,尝试删除它,之后再调用带$expand=extensions的用户接口,应该就能正常返回了;
  • 检查扩展创建逻辑:回顾你创建用户扩展的代码,确保在创建时正确指定了目标用户的id,避免出现未绑定用户的"孤儿"扩展记录。

内容的提问来源于stack exchange,提问作者JTInfinite

火山引擎 最新活动