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

SharePoint Online Rest API 创建列表项返回403 - Forbidden错误问题咨询

403 Forbidden错误引发原因

  • 缺少SPO POST请求强制要求的X-RequestDigest校验头:SharePoint Online所有写入类REST接口都需要携带该请求头做CSRF校验,你当前提交的headers配置中未包含该字段,是最高概率的触发原因。
  • 账号权限不足:当前操作的登录账号没有目标Departments列表的添加项权限,或无对应站点的访问权限。
  • 列表项元数据类型配置错误:代码中__metadata的type值通过变量pListName拼接生成,如果pListName和列表的实际内部名称不匹配,也会触发校验类403错误。
  • 跨域请求未授权:如果你的代码部署在SharePoint站点域外,未配置SPO的跨域访问权限或未携带合法授权令牌,也会返回403。

对应解决方案

1. 补充X-RequestDigest请求头

如果你的代码是直接嵌入在SharePoint站点页面中,直接从页面内置的隐藏字段取请求摘要即可,修改后的请求代码如下:

var listURL = webURL + "/_api/web/lists/GetByTitle('Departments')/items"; 
$.ajax({  
    url: listURL,
    type: "POST",  
    headers: {  
        "accept": "application/json;odata=verbose",  
        "content-Type": "application/json;odata=verbose",
        "X-RequestDigest": $("#__REQUESTDIGEST").val() // 新增请求摘要头
    },  
    data: JSON.stringify({  
        '__metadata': { 'type': 'SP.Data.' + pListName + 'ListItem' },
        'Title': 'Test1'
    }),
    success: function(data) {  
        console.log(data.d.results);  
        alert("Item added")
    },  
    error: function(error) {  
        alert(JSON.stringify(error));  
    }  
}); 

如果请求上下文不存在该隐藏字段,可以先调用GET接口webURL + "/_api/contextinfo"获取请求摘要值,再填入请求头。

2. 校验账号权限

联系站点管理员确认当前操作账号已被分配目标列表的【添加列表项】权限,最低需要列表层级的编辑权限才可新增项。

3. 修正列表实体类型值

先调用GET接口webURL + "/_api/web/lists/GetByTitle('Departments')?$select=ListItemEntityTypeFullName"查询该列表对应的正确实体类型名称,和你拼接的SP.Data.xxxListItem做比对,如果列表名称包含空格、特殊字符,内部名称会做转义处理,不能直接用列表显示名称拼接type值。

4. 跨域场景授权

如果你的代码是部署在SharePoint域外的独立应用,需要先在Azure AD中注册应用,申请SharePoint对应的读写权限,获取合法的OAuth2访问令牌后,将令牌添加到Authorization请求头中再发起请求。

内容的提问来源于stack exchange,提问作者Venkat Sunkara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:57:03