Microsoft Graph API返回200状态码但响应包含InternalServerError错误
问题根因
这是Microsoft Graph API查询transitiveMemberOf接口时的已知类型冲突问题:
- 你调用端点时使用了
microsoft.graph.group类型转换筛选,但是用户的可传递成员身份同时包含*目录角色(directoryRole)*和组两类资源,OData协议要求同一资源集内的所有条目必须有共同基类,当结果集混入非group类型的资源时,API就会在返回正常组数据的末尾追加该内部错误,且HTTP状态码仍然返回200,同时会破坏返回内容的JSON结构。
解决方案
可通过以下三种方式处理,优先选择方案1从根源避免问题:
方案1:改用$filter筛选资源类型代替强制类型转换
将原请求端点替换为:https://graph.microsoft.com/v1.0/me/transitiveMemberOf?$filter=isof('microsoft.graph.group')&$count=true
同时在请求头中添加ConsistencyLevel: eventual,该方案会在服务端自动过滤所有非group类型的资源,不会触发类型冲突错误,返回的JSON结构完整可直接解析。
方案2:先查询全量成员身份再本地过滤
直接请求无类型转换的端点:https://graph.microsoft.com/v1.0/me/transitiveMemberOf?$count=true,请求头同样添加ConsistencyLevel: eventual,拿到全量成员资源后,在本地代码中根据@odata.type字段筛选出值为#microsoft.graph.group的条目,提取所需的组名称即可。
临时兼容方案
如果当前接口返回的正常组数据是完整的,也可以在代码中先做字符串预处理,截取到value数组的正常闭合部分后再做JSON解析,忽略末尾的错误片段。
内容的提问来源于stack exchange,提问作者amol jadhav
相关产品推荐
相关产品推荐

