2

我正在尝试为共享点列表创建一个网络挂钩。不幸的是,这样做的唯一方法是调用 API。所以我调用了 API 来创建我自己的 web 挂钩到我的共享点站点中的自定义列表。

在我的 sharepoint 站点中,我在 Chrome 中打开了开发工具,并使用了以下代码:

fetch("https://my-org.sharepoint.com/sites/my-site/_api/web/lists('list-id')/subscriptions", {
  "headers": {
    "accept": "application/json",
    "content-type": "application/json",
  },
  "body": "{\"resource\":\"https://my-org.sharepoint.com/sites/my-site/_api/web/lists('list-id')\",\"notificationUrl\":\"http://my-ngrok-id.ngrok.io\",\"expirationDateTime\":\"2021-11-03T21:54:41.000\"}",
  "method": "POST",
});

但它给出了一个403错误:

{
    "odata.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."
        }
    }
}
4

2 回答 2

4

通常,此错误是由缺少或过期的表单摘要引起的。如果您没有使用 OAuth 来授权您的请求,这些操作需要服务器的请求表单摘要值作为 X-RequestDigest 标头的值

您可以通过使用空正文向 POST 请求来检索此值http://<site url>/_api/contextinfo。或者,如果您的代码在 SharePoint 页面中运行,您可以直接通过 SharePoint 控件“#__REQUESTDIGEST”获取它。

BR

于 2020-11-04T07:17:50.367 回答
1

如果在 SharePoint 页面上,则修改标头以包含 X-RequestDigest。

"headers": {
    "X-RequestDigest": $('#__REQUESTDIGEST').val(),
    "accept": "application/json",
    "content-type": "application/json",
},
于 2021-01-07T18:40:44.297 回答