2015-09-07 120 views
7

我试图创建在SharePoint 2013 REST API一个简单的列表项时禁止错误403 我的代码:通过REST API的SharePoint 2013:试图创建项目

$.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

实测溶液几天前: 我忘了补充请求消化形式的身体。它应该有以下结构;

<form runat="server"> 
    <SharePoint:FormDigest ID="FormDigest1" runat="server"></SharePoint:FormDigest> 
</form> 
10

最可能发生此错误的原因是表单摘要已在页面上已过期

在这种情况下,您可以通过向/_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)); 
}); 
0

我解决了同样的问题:

<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> 
相关问题