#node.js #sharepoint
#node.js #sharepoint
Вопрос:
Я загружаю файл в sharepoint и пытаюсь обновить его метаданные, но на последнем шаге я всегда получаю ошибку 400.
Насколько я понимаю, sharepoint обрабатывает только списки и элементы. «Папка» — это список, а метаданные и файлы внутри являются элементами. И «файл» — это список, а его метаданные — элементы.
В документации об обновлении метаданных говорится о том, чтобы сделать запрос POST на:
- https: // {site_url} / _api / web / списки / GetByTitle (‘{list_title}’) / элементы ({item_id})
Обновление файлов должно выполняться методом PUT (не допускается СЛИЯНИЕ), но обновление метаданных должно выполняться специально методом MERGE. Я пробовал оба, и оба потерпели неудачу.
Это мой текущий запрос на обновление метаданных, но я продолжаю получать сообщение об ошибке 400.
var data = {
"__metadata": {
"type":type
},
"Description":"lorem ipsum"
};
var headerToken = {
headers: {
'Authorization':'Bearer ' token
, 'X-HTTP-Method':'MERGE'
, 'Accept':'application/json;odata=verbose'
, 'Content-Type':'application/json;odata=verbose'
, 'Content-Length':JSON.stringify(data).length
, 'If-Match': etag
, 'X-RequestDigest': digest
}
};
try {
var response = await axios.post(
'https://{site_url}/_api/web/lists/GetByTitle("' MY_FOLDER '")/items(' id ')'
, JSON.stringify(data)
, headerToken
);
return response;
}
тип, etag и id получаются из ответа на загрузку файла, а дайджест — из запроса к конечной точке contextinfo. MY_FOLDER является тестовой библиотекой и на данный момент является константой.
Ответ №1:
Вам нужно использовать одинарные кавычки в getbytitle.
"https://{site_url}/_api/web/lists/GetByTitle('" MY_FOLDER "')/items(" id ")"
Обновлено:
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.9.1.min.js" type="text/javascript"></script>
<script>
$(document).ready(function () {
UpdateFolder()
function UpdateFolder(){
$.ajax({
url: _spPageContextInfo.webAbsoluteUrl "/_api/web/lists/GetByTitle('Doc')/items(30)",
type: "POST",
headers: {
"accept": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"content-Type": "application/json;odata=verbose",
"IF-MATCH": "*",
"X-HTTP-Method": "MERGE"
},
data: "{__metadata:{'type':'SP.Data.DocItem'},test:'test'}",
/*where Title is column name and add your desired new data*/
success: function(data) {
console.log(data);
},
error: function(error) {
alert(JSON.stringify(error));
}
});
}
})
</script>
Комментарии:
1. Я пробовал как одинарные, так и двойные кавычки, и я всегда получаю «ошибка 400».
2. Мой тестовый код js для вашей справки. Где вы используете этот свой код? SPFX?
3. Я использовал эту ссылку. Мой код должен использоваться на внешних серверах (без установленного sharepoint). Именно по этой причине я должен запросить contextinfo, чтобы получить значение X-RequestDigest.