使用REST向SharePoint列表添加和删除项目时,403禁止和400个错误请求错误

时间:2013-06-19 14:01:48

标签: rest sharepoint sharepoint-2013

您好我是SharePoint开发的新手。我正在尝试使用SharePoint在线开发简单的SharePoint应用程序。我的网站集中有一个名为“Products”的列表。在我的应用程序中,我编写了以下代码来添加和删除该列表中的项目

 function addProduct(product) {
 var executor;
 executor = new SP.RequestExecutor(appwebUrl);
 var url = appwebUrl +"/_api/SP.AppContextSite(@target)/web/lists/getbytitle('Products')/items/?@target='" + hostwebUrl+"'";
 executor.executeAsync({
    url: url,
    method: "POST",
    body: JSON.stringify({__metadata: { type: 'SP.Data.ProductsListItem' },
        Title: product.ProductName(),
        ProductId: product.ProductId(),
        ProductName: product.ProductName(),
        Price:product.Price()
    }),
    headers: {
        "Accept": "application/json; odata=verbose",
        "content-type": "application/json;odata=verbose",
        },
    success: successProductAddHandler,
    error: errorProductAddHandler
});
}


function successProductAddHandler(data) {alert('added successfully') }
function errorProductAddHandler(data, errorCode, errorMessage) { alert('cannot perform action') }


function deleteProduct(product) {
var executor;
executor = new SP.RequestExecutor(appwebUrl);
var url=appwebUrl+"/_api/SP.AppContextSite(@target)/web/lists/getbytitle('Products')/items('" + product.ID() + "')/?@target='" + hostwebUrl + "'";
executor.executeAsync({
    url: url,
    method: "POST",
    headers: {

        "IF-MATCH": "*",
        "X-HTTP-Method": "DELETE"
    },
    success: successProductAddHandler,
    error: errorProductAddHandler
});`

当我调用addProduct时出现403错误, 当我调用deleteProduct时出现400错误, 我能够获得列表项和显示。

我尝试添加X-RequestDigest“:$(”#__ REQUESTDIGEST“)。val()但没有工作

如果我在deleteProduct()的请求头中包含“Accept”:“application / json; odata = verbose”,当我调用deleteProduct时,两个请求将转到服务器

1).sites / productsdev / productsapp / _api / contextinfo(获取摘要值)

2)/sites/ProductsDev/ProductsApp/_api/SP.AppContextSite(@target)/ web / lists / getbytitle('Products')/ items(itemid)/?@ target ='mysitecollectionurl'(使用摘要值)由上述X-RequestDigest调用返回

1 个答案:

答案 0 :(得分:3)

每当您使用REST API在SharePoint 2013中执行任何POST操作时,都必须在标题中传递以下代码段

  

“X-RequestDigest”:$(“#__ REQUESTDIGEST”)。val()

例如

  

标题:{“接受”:“application / json; odata = verbose”,           “X-RequestDigest”:$(“#__ REQUESTDIGEST”)。val()}