Sharepoint Angular REST 添加项目产量 400(错误请求)
Sharepoint Angular REST add item yields 400 (Bad Request)
这几天我一直在用头撞墙。我正在尝试使用 Angular js 将项目添加到 Sharepoint 中的列表。
检索项目很顺利,但添加项目对我来说不起作用。
代码:
spApp.controller('spListCtrl', function($scope, $http, $q) {
$http.post("https://tools.site.com/_api/lists/getbytitle('PersonalFilter')/items", {
'Title': 'TEST'
}, {
headers: {
'Accept': 'application/json; odata=verbose',
'X-RequestDigest': $("#__REQUESTDIGEST").val()
}
}).success(function(data, status, headers, config) {
console.log("YES");
}).error(function(data, status, headers, config) {});
});
我以前用 jQuery Ajax 做过这个(以类似的方式),但我似乎无法找到问题所在。
脚本与调用位置在同一站点上 运行,因此没有跨域调用。此外,它嵌入了脚本编辑器,因此 运行 直接位于 Sharepoint Masterpage 中。
有什么建议吗?
由于以下原因可能会出现此错误:
1.Invalid 列表项负载
特别是 body
属性的格式对于列表项必须具有以下格式:
$http({
data: { Title : 'John Doe', __metadata: {type: 'SP.Data.ContactsListItem' }},
//remaining parameters are omitted for clarity
});
其中
Title
是列表项 的 属性
__metadata
属性是一个 mandatory 并指定列表项的实体类型(在您的情况下缺少此属性,在我的情况下因为它是
Contacts
列表,值为SP.Data.ContactsListItem
)见关于
下面的 List Item entity type 部分描述了如何确定实体
列表项的类型。
2。缺少 header Content-Type
Content-Type
必须指定,例如:
$http({
headers: {
"Content-Type" : "application/json;odata=verbose",
//...
}
});
以下示例演示了如何使用 SharePoint 2013/Online REST 创建列表项。
例子
$scope.createContact = function() {
var endpointUrl = "https://contoso.sharepoint.com/_api/web/lists/getByTitle('Contacts')/items";
var itemPayload = { Title : 'John Doe', __metadata: {type: 'SP.Data.ContactsListItem' }};
$http({
method: "POST",
url : endpointUrl,
data: itemPayload,
headers: {
"Content-Type" : "application/json;odata=verbose",
"Accept": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
}
}).success(function (data, status, headers, config) {
//Process List Item
var contact = data.d;
}).error(function (data, status, headers, config) {
//An error occured...
});
}
关于列表项实体类型
以下查询可以确定列表项的实体类型:
端点 URI:https://contoso.sharepoint.com/_api/web/lists/getByTitle('<list title>')?$select=ListItemEntityTypeFullName
这几天我一直在用头撞墙。我正在尝试使用 Angular js 将项目添加到 Sharepoint 中的列表。
检索项目很顺利,但添加项目对我来说不起作用。
代码:
spApp.controller('spListCtrl', function($scope, $http, $q) {
$http.post("https://tools.site.com/_api/lists/getbytitle('PersonalFilter')/items", {
'Title': 'TEST'
}, {
headers: {
'Accept': 'application/json; odata=verbose',
'X-RequestDigest': $("#__REQUESTDIGEST").val()
}
}).success(function(data, status, headers, config) {
console.log("YES");
}).error(function(data, status, headers, config) {});
});
我以前用 jQuery Ajax 做过这个(以类似的方式),但我似乎无法找到问题所在。
脚本与调用位置在同一站点上 运行,因此没有跨域调用。此外,它嵌入了脚本编辑器,因此 运行 直接位于 Sharepoint Masterpage 中。
有什么建议吗?
由于以下原因可能会出现此错误:
1.Invalid 列表项负载
特别是 body
属性的格式对于列表项必须具有以下格式:
$http({
data: { Title : 'John Doe', __metadata: {type: 'SP.Data.ContactsListItem' }},
//remaining parameters are omitted for clarity
});
其中
Title
是列表项 的 属性
__metadata
属性是一个 mandatory 并指定列表项的实体类型(在您的情况下缺少此属性,在我的情况下因为它是Contacts
列表,值为SP.Data.ContactsListItem
)见关于 下面的 List Item entity type 部分描述了如何确定实体 列表项的类型。
2。缺少 header Content-Type
Content-Type
必须指定,例如:
$http({
headers: {
"Content-Type" : "application/json;odata=verbose",
//...
}
});
以下示例演示了如何使用 SharePoint 2013/Online REST 创建列表项。
例子
$scope.createContact = function() {
var endpointUrl = "https://contoso.sharepoint.com/_api/web/lists/getByTitle('Contacts')/items";
var itemPayload = { Title : 'John Doe', __metadata: {type: 'SP.Data.ContactsListItem' }};
$http({
method: "POST",
url : endpointUrl,
data: itemPayload,
headers: {
"Content-Type" : "application/json;odata=verbose",
"Accept": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
}
}).success(function (data, status, headers, config) {
//Process List Item
var contact = data.d;
}).error(function (data, status, headers, config) {
//An error occured...
});
}
关于列表项实体类型
以下查询可以确定列表项的实体类型:
端点 URI:https://contoso.sharepoint.com/_api/web/lists/getByTitle('<list title>')?$select=ListItemEntityTypeFullName