OneDrive 和 SharePoint 中的已缩短共享链接格式

OneDrive 和 SharePoint 中的共享文件和文件夹链接现已缩短,并采用了新格式。 例如,下面展示了对组织内所有人都有效的 OneDrive 链接的新旧格式。


旧链接格式 新链接格式
https://contoso-my.sharepoint.com/personal/john_contoso_com/_layouts/15/guestaccess.aspx?share=ERGZUIZ8E0pAuC1oJtwz4dQB23IabPgbMtiVe0OLPtMybw https://contoso-my.sharepoint.com/:w:/p/john_contoso_com/ERGZUIZ8E0pAuC1oJtwz4dQB23IabPgbMtiVe0OLPtMybw

备注

在引入此更改前共享的链接不受此更改影响,将继续有效。

新链接格式可能会影响遵循或依赖 OneDrive 或 SharePoint URL 结构的应用程序或服务,尤其是当这些应用程序或服务分析网站 URL 或特定字符串时。 新的短链接与所有搭配 guestaccess.aspx 链接使用的 API 都兼容。

下面介绍了此更改影响的一些方案:

  • 应用程序分析最终用户输入的 URL 来获取网站 URL,以生成 SharePoint REST API 请求(如 GetFileByUrl 或 GetSharingLinkData)。

  • 应用程序需要使用最终用户输入的 URL,并使用 CSOM 尝试查询文件信息。

  • 应用程序分析最终用户输入的 URL,以确定它是匿名链接,还是仅供内部使用的共享链接。

使用 Microsoft Graph 与 SharePoint 链接进行交互的应用程序将继续有效。 有关详细信息,请参阅访问共享的 DriveItem

SharePoint REST API

SharePoint REST API 不支持与用户输入链接进行交互。 建议尽量迁移到 Microsoft Graph 共享 API。

如果无法迁移到 Microsoft Graph,可以采用下列解决办法。 请注意,此解决办法不受支持。

  1. 确定基 URL。 这现在是链接的主机名。

  2. 通过连接基 URL、SP.RemoteWeb 和特定 API 方法,构造 API 请求(如下所示)。

    {hostname}/_api/SP.RemoteWeb(@a)/web/{specific_api_here}?@a='{url_encoded_link}'

例如,对于以下输入 URL:

https://contoso-my.sharepoint.com/personal/john_contoso_com/_layouts/15/guestaccess.aspx?share=ERGZUIZ8E0pAuC1oJtwz4dQB23IabPgbMtiVe0OLPtMybw

旧 API 请求如下:

https://contoso-my.sharepoint.com/personal/john_contoso_com/_api/web/GetFileByUrl(@url)?@url='https%3A%2F%2Fcontoso-my.sharepoint.com%2Fpersonal%2Fjohn_contoso_com%2F_layouts%2F15%2Fguestaccess.aspx%3Fshare%3DERGZUIZ8E0pAuC1oJtwz4dQB23IabPgbMtiVe0OLPtMybw

新 API 请求如下:

https://contoso-my.sharepoint.com/_api/SP.RemoteWeb(@url)/web/GetFileByUrl(@url)?@url='https%3A%2F%2Fcontoso-my.sharepoint.com%2Fpersonal%2Fjohn_contoso_com%2F_layouts%2F15%2Fguestaccess.aspx%3Fshare%3DERGZUIZ8E0pAuC1oJtwz4dQB23IabPgbMtiVe0OLPtMybw

若要确定链接的特定类型,请检查 GetSHaringLinkData API(将示例中的 GetFileByUrl 替换为 GetSharingLinkData)响应中的 IsSharingLinkIsAnonymous 字段。 请使用此方法,而不是分析 URL 以获取 guestaccess.aspx 等令牌。

SharePoint CSOM

CSOM 不支持与用户输入链接进行交互。 一些应用程序打开 ClientContext,并查询文件元数据,具体是通过从 SharePoint 链接中连续截断路径段,直到 ClientContext 构造函数成功。 这种方法不再适用于新 URL 格式。

若要解决此问题,请执行以下操作:

  1. 在根网站 (scheme://hostname) 上打开“ClientContext”。

  2. 调用 Web.WebUrlFromPageUrlDirect() 以获取链接的 Web URL。

  3. 使用此 Web URL 打开新“ClientContext”,以便发出其他请求。

备注

这种方法不受支持。