Office 365 统一 api(预览)组文件仅在某些租户中返回 500 内部服务器错误
Office 365 unified api (preview) group files returning 500 internal server error only in some tenants
我已成功使用 Office 365 统一 API 到 link 我的多租户 SaaS 应用程序到 Office 365 和 return 统一组的文件。我使用 ADAL 库和 Unified API nuget 包实现了这一点。我们已根据统一 API 预览发行说明在我们的 Azure AD 应用程序中请求以下权限(以及其他权限)- Group.Read.All、Group.ReadWrite.All、Sites.Read.All、Sites.ReadWrite.All.我感谢 ReadWrite 让 Read 变得不必要,但我们添加了这两个集合以尝试保护我们自己免受一些可能的预览问题的影响。
现在我们有一个租户可以读取他们的组但不能访问组中的文件。这在其他租户中工作正常。
我们在调试代码的时候,发现这一行抛出了空引用异常:
IPagedCollection<IItem> files = await _client.groups.GetByID(groupId).files.ExecuteAsync()
然后我们将其分离出来以检查是否收到了正确的组:
IGroup group = await _client.groups.GetById(groupId).ExecuteAsync()
因此,我们使用 HTTP 客户端发出了相同的文件请求,以便我们可以从服务器获得更详细的响应:
https://graph.microsoft.com/beta/myOrganization/groups/[group_id_here]/files
这是 return 状态代码 500 - 内部服务器错误,内容是 'Object reference not set to an instance of an object'。帮助不大!
我看到一些关于人们遇到类似问题的帖子,权限设置不正确,但就我而言,我不明白为什么检索统一组文件的调用在一个 Office 365 租户中可以正常工作,但不能正常工作在另一个情况下,当他们的权限由同一个 Azure AD 应用程序控制时,因此完全相同。
这些组都是在 Office 365 Web App 中创建的,而不是通过统一 API,因此这不是一个因素。
Office 365 中是否有管理员可以用来限制对统一 api 请求的访问的权限?我在文档中看不到任何内容,但即使是这种情况,我也希望得到未经授权的响应,而不是内部服务器错误。
非常感谢任何想法!
很抱歉这个问题。所以我相信我们不小心提前推动了一个变化,而你在我们恢复变化之前成功地做到了这一点。我们正在通过 OneDrive API 更新对文件的访问,这将导致重大更改。您可以在此处阅读更多相关信息,以及我们计划在 10 月 19 日更新的 /beta 端点上的突破:http://dev.office.com/blogs/Update-2-on-Office-365-unified-API。更新后,访问文件将需要以下语法:
https://graph.microsoft.com/stagingBeta/microsoft.com/groups/groupId/drive/root/children
注意:我们需要为此生成一个新的客户端库。您当前使用的那个将因这次更新而中断。我们希望在本次服务更新后尽快推出新的客户端库。
现在我不确定这是否正是您偶然发现的,或者这是否是一个不同的问题。你能再试一次吗(在我们 10 月 19 日中午 12 点更新之前)?
希望这对您有所帮助,
我已成功使用 Office 365 统一 API 到 link 我的多租户 SaaS 应用程序到 Office 365 和 return 统一组的文件。我使用 ADAL 库和 Unified API nuget 包实现了这一点。我们已根据统一 API 预览发行说明在我们的 Azure AD 应用程序中请求以下权限(以及其他权限)- Group.Read.All、Group.ReadWrite.All、Sites.Read.All、Sites.ReadWrite.All.我感谢 ReadWrite 让 Read 变得不必要,但我们添加了这两个集合以尝试保护我们自己免受一些可能的预览问题的影响。
现在我们有一个租户可以读取他们的组但不能访问组中的文件。这在其他租户中工作正常。
我们在调试代码的时候,发现这一行抛出了空引用异常:
IPagedCollection<IItem> files = await _client.groups.GetByID(groupId).files.ExecuteAsync()
然后我们将其分离出来以检查是否收到了正确的组:
IGroup group = await _client.groups.GetById(groupId).ExecuteAsync()
因此,我们使用 HTTP 客户端发出了相同的文件请求,以便我们可以从服务器获得更详细的响应:
https://graph.microsoft.com/beta/myOrganization/groups/[group_id_here]/files
这是 return 状态代码 500 - 内部服务器错误,内容是 'Object reference not set to an instance of an object'。帮助不大!
我看到一些关于人们遇到类似问题的帖子,权限设置不正确,但就我而言,我不明白为什么检索统一组文件的调用在一个 Office 365 租户中可以正常工作,但不能正常工作在另一个情况下,当他们的权限由同一个 Azure AD 应用程序控制时,因此完全相同。
这些组都是在 Office 365 Web App 中创建的,而不是通过统一 API,因此这不是一个因素。
Office 365 中是否有管理员可以用来限制对统一 api 请求的访问的权限?我在文档中看不到任何内容,但即使是这种情况,我也希望得到未经授权的响应,而不是内部服务器错误。
非常感谢任何想法!
很抱歉这个问题。所以我相信我们不小心提前推动了一个变化,而你在我们恢复变化之前成功地做到了这一点。我们正在通过 OneDrive API 更新对文件的访问,这将导致重大更改。您可以在此处阅读更多相关信息,以及我们计划在 10 月 19 日更新的 /beta 端点上的突破:http://dev.office.com/blogs/Update-2-on-Office-365-unified-API。更新后,访问文件将需要以下语法: https://graph.microsoft.com/stagingBeta/microsoft.com/groups/groupId/drive/root/children
注意:我们需要为此生成一个新的客户端库。您当前使用的那个将因这次更新而中断。我们希望在本次服务更新后尽快推出新的客户端库。
现在我不确定这是否正是您偶然发现的,或者这是否是一个不同的问题。你能再试一次吗(在我们 10 月 19 日中午 12 点更新之前)?
希望这对您有所帮助,