Sharepoint 2013 通过 REST API:尝试创建项目时禁止出现错误 403
Posted
技术标签:
【中文标题】Sharepoint 2013 通过 REST API:尝试创建项目时禁止出现错误 403【英文标题】:Sharepoint 2013 via REST API: Error 403 Forbidden when trying to create item 【发布时间】:2015-12-02 19:38:31 【问题描述】:我正在尝试使用 Sharepoint 2013 上的其余 api 创建一个简单的列表项。 我的代码:
$.ajax(
url: siteUrl + "/_api/web/lists/getByTitle('internal_Listname')/items",
type: "POST",
contentType: "application/json;odata=verbose",
data: JSON.stringify(
'__metadata':
'type': 'SP.Data.internal_ListnameListItem',
,
'K1F1': k1f1Result,
),
headers:
"accept": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
,
success: function (data)
console.log("done");
,
error: function (err)
console.log(JSON.stringify(err));
);
尝试发送数据时,我收到 403“禁止”错误。
"error":
"code":"-2130575251, Microsoft.SharePoint.SPException",
"message":
"lang":"en-US",
"value":"The security validation for this page is invalid and might be corrupted. Please use your web browser's Back button to try your operation again."
我拥有此站点和列表的完全管理员权限。
【问题讨论】:
【参考方案1】:很可能发生此错误,因为页面上的表单摘要已过期。
在这种情况下,您可以通过向/_api/contextinfo
端点发出POST
请求来获取新的表单摘要值。
示例
function getFormDigest(webUrl)
return $.ajax(
url: webUrl + "/_api/contextinfo",
method: "POST",
headers: "Accept": "application/json; odata=verbose"
);
function createListItem(webUrl, listName, itemProperties)
return getFormDigest(webUrl).then(function (data)
return $.ajax(
url: webUrl + "/_api/web/lists/getbytitle('" + listName + "')/items",
type: "POST",
processData: false,
contentType: "application/json;odata=verbose",
data: JSON.stringify(itemProperties),
headers:
"Accept": "application/json;odata=verbose",
"X-RequestDigest": data.d.GetContextWebInformation.FormDigestValue
);
);
用法
//Create a Task item
var taskProperties =
'__metadata': 'type': 'SP.Data.WorkflowTasksItem' ,
'Title': 'Order approval'
;
createListItem(_spPageContextInfo.webAbsoluteUrl, 'Workflow Tasks', taskProperties)
.done(function (data)
console.log('Task has been created successfully');
)
.fail(function (error)
console.log(JSON.stringify(error));
);
【讨论】:
我必须改变一件事才能让它工作:return getFormDigest(webUrl).then(response => response.json()).then(function (data) 即使在上面的代码之后错误仍然存在。最终确定它与权限有关。我试图添加项目的用户具有读取权限。在设置了贡献权限后,它起作用了。总之 - 一个非常误导性的错误信息。导致浪费时间:( 如果我有一个带有人员选择器控件、日期变量、单行文本、选择字段等的 html 表单。如何使用 REST API 插入列表项 我正在使用以下调用在 SharePoint2019 上创建一个文件夹:POST http://几天前找到了解决方案: 我忘记将请求摘要表格添加到正文中。它应该具有以下结构;
<form runat="server">
<SharePoint:FormDigest ID="FormDigest1" runat="server"></SharePoint:FormDigest>
</form>
【讨论】:
Vadim Gremyachev 的回答很有魅力。这对我所做的只是让页面显示错误:“抱歉,出了点问题。发生了意外错误” @DevBot 我不喜欢他的回答,因为/contextinfo
请求在所有其他请求之前完成,这是性能毒药。【参考方案3】:
我对同样问题的解决方案:
<form id="form1" runat="server"> <!-- this make SP 2013 take it legit -->
<div class="style1"> <!-- dont know what, but SP need it -->
---your page usually a divs---
</div>
</form>
【讨论】:
以上是关于Sharepoint 2013 通过 REST API:尝试创建项目时禁止出现错误 403的主要内容,如果未能解决你的问题,请参考以下文章
Sharepoint 2013:通过 REST API 确保用户
Sharepoint 2013 通过 REST API:尝试创建项目时禁止出现错误 403
SharePoint 2013 - REST API about Content
如何通过 REST API 在另一台服务器上为 Sharepoint 2013 和 Sharepoint Online 运行的脚本中更新 SharePoint 列表?