2

我正在尝试在 SharePoint 2013 SharePoint 托管应用程序中使用 REST 将文件夹添加到文档库。它托管在 Office 365 开发人员站点中。我在这里遵循 MSDN 中的指南,并使用dev.office.com上的优秀示例(尤其是 REST Helper)。

在调试期间捕获请求时,与文档和示例相比,我的请求没有任何问题。我也没有遇到任何 GET 请求的问题。

这是我的要求:

var datatext = "{'__metadata': {'type': 'SP.Folder'}, 'ServerRelativeUrl': '" + serverRelativeUrl + foldername + "'}";

$.ajax({
    url : $appweburl + "/_api/web/folders",
    type: "POST",
    data: datatext,
    headers: {
        "accept": "application/json;odata=verbose",
        "X-RequestDigest": $("#__REQUESTDIGEST").val(),
        "content-type": "application/json;odata=verbose",
        "content-length": datatext.length
    },
    success: function (data) {
        success(data);
    },
    error: function (data) {
        failure(data);
    }
});

这会产生错误“值不在预期范围内”

所以这使用“数据”而不是“正文”,因为“正文”总是生成 JSON 阅读器错误。所有样本都指示“正文”,但我发现其他显示此密钥的来源应该是这样的 POST 中的“数据”,它解决了 JSON 阅读器错误。我确保 ServerRelativeUrl 以“/”和文件名开头。

任何帮助是极大的赞赏。

编辑:为了跟进这一点,我只成功地使用了 JSOM。事实证明,您必须将 ListItem 添加到列表中并将内容类型指定为文件夹才能实现此目的。它可以工作,但它让我想知道您是否必须在 REST 中做类似的事情——而不是使用文件夹端点,就像将列表项添加到列表中一样。我还没有确认。

4

1 回答 1

2

通常Value does not fall within the expected range会发生错误,因为ServerRelativeUrl属性以不正确的格式指定。

支持以下格式:

  • [Document Library]/[New Folder]列表/库相对 url
  • /[Site]/[Web]/[Document Library]/[New Folder]- 网站集相对 url
  • http(s)://[Server]/[Site]/[Web]/[Document Library]/[New Folder]
    绝对网址

如何使用 SharePoint 2013 REST 创建文件夹

假设以下站点结构:

`News` site (under `sites` managed path)
   |
   `Documents` library
       |
      `Archive` folder

然后以下示例演示如何创建名为library2010的文件夹:Documents

示例 1

createFolder(_spPageContextInfo.webAbsoluteUrl,'/sites/news/Documents/Archive/2011')
.done(function(data)
{
    var folder = data.d;
    console.log('Folder ' + folder.Name  + ' has been created successfully');
})
.fail(
function(error){
    console.log(JSON.stringify(error));
});

示例 2

createFolder(_spPageContextInfo.webAbsoluteUrl,'Documents/Archive/2010')
.done(function(data)
{
    var folder = data.d;
    console.log('Folder ' + folder.Name  + ' has been created successfully');
})
.fail(
function(error){
    console.log(JSON.stringify(error));
});

在哪里

function executeRequest(url,method,headers,payload) 
{
    if (typeof headers == 'undefined' || headers == null){
        headers = {};
    }
    headers["Accept"] = "application/json;odata=verbose";
    if(method == "POST") {
        headers["X-RequestDigest"] = $("#__REQUESTDIGEST").val();
    }   

    var ajaxOptions = 
    {       
       url: url,   
       type: method,  
       contentType: "application/json;odata=verbose",
       headers: headers
    };
    if(method == "POST") {
      ajaxOptions.data = JSON.stringify(payload);
    }  

    return $.ajax(ajaxOptions);
}

function createFolder(webUrl,folderUrl) 
{    
    var url = webUrl + "/_api/web/folders";   
    var folderPayload = { '__metadata': { 'type': 'SP.Folder' }, 'ServerRelativeUrl': folderUrl}; 
    return executeRequest(url,'POST',null,folderPayload);
}
于 2015-01-28T08:35:49.870 回答