You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过REST API创建SharePoint匿名访问链接?

我来帮你解决这个SharePoint匿名链接的问题——其实通过REST API创建匿名链接是完全可行的,你之前的问题主要出在端点用错和配置没到位上,下面一步步拆解:

一、先明确:匿名链接可以通过REST API生成

SharePoint Online提供了专门的REST接口来创建匿名(任何人可访问)的共享链接,你之前尝试的两个端点都不是正确的官方接口,所以才会报错。

二、正确的REST API调用方式

推荐使用CreateAnonymousLinkWithExpiration接口(支持设置过期时间,也可以设为永不过期),具体参数和格式如下:

1. 端点地址

https://myclient.sharepoint.com/sites/CustomerPortal/_api/web/CreateAnonymousLinkWithExpiration

2. 请求要求

  • 请求方法:POST
  • 必须的请求头:
    • Accept: application/json;odata=verbose
    • Content-Type: application/json;odata=verbose
    • X-RequestDigest: [你的请求摘要值](这个值需要先从站点的/_api/contextinfo接口获取,否则POST请求会被拒绝)

3. 请求体示例

{
  "url": "https://myclient.sharepoint.com/sites/CustomerPortal/Folder/file.pdf",
  "isEditLink": false, // false=仅查看链接,true=可编辑链接
  "expiration": null // null表示永不过期,也可以传ISO格式日期如"2025-12-31T23:59:59Z"
}

关键注意点:

  • 这里的url必须是文件的完整HTTPS绝对路径,要和你的站点域名完全匹配,不能用HTTP或者相对路径。
  • 获取X-RequestDigest的方法:发送GET请求到https://myclient.sharepoint.com/sites/CustomerPortal/_api/contextinfo,从响应的d/GetContextWebInformation.FormDigestValue字段提取即可。
三、SharePoint端必须完成的配置

要生成匿名链接,你的客户需要在租户和站点两个层面开启对应的权限:

租户级配置(管理员操作)

  1. 登录Microsoft 365管理员中心,进入SharePoint admin中心
  2. 点击左侧「策略」→「外部共享」
  3. 选择对应的站点(或整个租户),将外部共享权限设置为任何人(最低要选这个,更低的权限无法生成匿名链接)
  4. 确认「匿名链接」选项处于开启状态(部分租户可能默认禁用,需要手动打开)

站点级配置(站点管理员操作)

  1. 进入目标站点,点击右上角设置→「站点信息」→「查看所有站点设置」
  2. 点击「外部共享」,确保站点的外部共享权限和租户设置一致(设为「任何人」)
  3. 检查文件所在的文档库/文件夹:如果库或文件夹设置了「不允许外部共享」,会覆盖站点设置,需要进入库的设置→「共享」调整权限。
四、你之前的错误原因分析
  1. 第一个错误InvalidClientQueryException:
    你使用的Lists(@a1)/GetItemById(@2)/ShareLink不是SharePoint REST API的官方端点,这个路径不存在,所以会提示表达式无效。

  2. 第二个错误InvalidOperationException:

    • 大概率是url参数格式错误(用了HTTP而非HTTPS,或者路径不正确)
    • 站点/租户的外部共享配置不允许匿名链接
    • 没有传递必要的X-RequestDigest请求头
五、PHP代码简化示例

如果要在你的PHP应用中实现这个逻辑,大致步骤如下(注意生产环境要用安全的认证方式,比如Azure AD令牌,不要用基本认证):

// 第一步:获取Request Digest
$digestUrl = "https://myclient.sharepoint.com/sites/CustomerPortal/_api/contextinfo";
$ch = curl_init($digestUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Accept: application/json;odata=verbose"
]);
// 这里需要添加认证信息,比如Azure AD令牌或用户凭据
$digestResponse = curl_exec($ch);
curl_close($ch);
$digestData = json_decode($digestResponse, true);
$requestDigest = $digestData['d']['GetContextWebInformation']['FormDigestValue'];

// 第二步:创建匿名链接
$createLinkUrl = "https://myclient.sharepoint.com/sites/CustomerPortal/_api/web/CreateAnonymousLinkWithExpiration";
$requestBody = json_encode([
    "url" => "https://myclient.sharepoint.com/sites/CustomerPortal/Folder/file.pdf",
    "isEditLink" => false,
    "expiration" => null
]);

$ch = curl_init($createLinkUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $requestBody);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Accept: application/json;odata=verbose",
    "Content-Type: application/json;odata=verbose",
    "X-RequestDigest: " . $requestDigest
]);
// 同样需要添加认证信息
$linkResponse = curl_exec($ch);
curl_close($ch);
$linkData = json_decode($linkResponse, true);

// 获取生成的匿名链接
$anonymousUrl = $linkData['d']['CreateAnonymousLinkWithExpiration'];
echo $anonymousUrl;

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:38:50