我正在尝试在SharePoint 2013 SharePoint托管应用程序中使用REST将文件夹添加到文档库。 它托管在 Office 365 开发人员网站中。 我在这里遵循 MSDN 中的准则,并在 dev.office.com 上使用出色的示例(尤其是 REST 帮助程序)。
在调试期间捕获请求时,与文档和示例相比,我看不到我的请求有任何问题。 我也没有遇到任何 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 读取器错误。 所有示例都指示"body",但我发现其他显示此键的来源应该是这样的 POST 中的"数据",它解决了 JSON 读取器错误。 我确保ServerRelativeUrl以"/"和文件名开头。
任何帮助将不胜感激。
编辑:为了跟进这一点,我只成功使用了JSOM。 事实证明,您必须将 ListItem 添加到列表中,并将内容类型指定为文件夹才能实现此目的。 它可以工作,但它让我想知道您是否必须在 REST 中做类似的事情 - 即不使用文件夹端点,而是像将列表项添加到列表一样。 我还没有证实。
通常,由于ServerRelativeUrl
属性以不正确的格式指定,因此会发生错误Value does not fall within the expected range
。
支持以下格式:
-
[Document Library]/[New Folder]
列表/库相对网址 -
/[Site]/[Web]/[Document Library]/[New Folder]
- 网站集相对网址 -
http(s)://[Server]/[Site]/[Web]/[Document Library]/[New Folder]
绝对网址
如何使用 SharePoint 2013 REST 创建文件夹
假定以下网站结构:
`News` site (under `sites` managed path)
|
`Documents` library
|
`Archive` folder
然后,以下示例演示如何在库中创建名为 2010
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);
}