如何使用 CSOM 检索 SharePoint 共享链接

How to retrieve SharePoint Share Links using CSOM

我目前正在开发一个程序,它将选定的文件上传到 SharePoint 上的特定文件夹(并在必要时自动创建文件夹)并使用 SharePoint CSOM 根据他们的电子邮件授予特定用户访问权限,但是我无法检索我域外的人的 links。

例如,使用我当前的代码,我正在检索 links,如下所示:

https://domain.sharepoint.com/:f:/r/sites/TestSite/Shared%20Documents/2019/11157/Test%20Upload?csf=1

但是,我要检索的 link 如下所示:

https://domain.sharepoint.com/:f:/s/TestSite/EmUDng-KzwxEtHKyJ9Okl0MBlS_z8gxGFl4UUjuGXHmR9w

如果我进入 SharePoint 并手动检索它(该程序使 link 正确),我可以检索上面的 link,但这违背了我的程序的目的。该程序应该自动上传和 link 从我公司的域中检索文件。

我不想要第一个 link,因为只有我域中的人才能使用它访问 file/folder。第二个 link 允许任何被授予访问权限(通过电子邮件地址)的人访问 file/folder.

我目前正在使用此处的代码检索第一个 link:https://www.c-sharpcorner.com/article/generating-sharing-links-report-and-removing-sharing-links-using-sharepoint-onli/

我还尝试了在 StackExchange 上找到的其他建议,例如:https://sharepoint.stackexchange.com/questions/91451/manage-links-for-shared-files

我发现的所有与上述类似的示例都会导致不正确的 links。

万一目前还不清楚,我不是在追求匿名 link 或如何创建共享 link(因为我已经有了这个工作),我是在追求 link 会出现 here

在随机尝试所有方法后,我设法找到了解决方案。您可以做的如下:

首先,按照我之前的方式创建分享link:

SharingResult result = context.Web.ShareDocument(site,
                       email,
                       ExternalSharingDocumentOption.View,
                       false,
                       "Document Shared as test");

然后使用结果变量,获取其中一位受邀用户的邀请 link,然后将其修改为适用于任何用户(事实证明,特定的 link 是相同的对于最后一个参数以外的所有用户)

string link = result.InvitedUsers.FirstOrDefault().
int index = link.IndexOf("?");
if (index > 0) link = link.Substring(0, index);

这导致了我正在寻找的正确 link。我确实和微软的一些人谈过这个问题,所以,感谢微软告诉我这是不可能的!