猛跑小豬
2021-07-06 17:49:49
我正在 Google 表格中創(chuàng)建一個對話框,用于生成報告并將其上傳到 OneDrive。用戶可能需要通過對話框在 OneDrive 中創(chuàng)建一個文件夾。但是,在發(fā)出 API 請求時,出現(xiàn)“BadRequest”錯誤。我嘗試使用 Curl 在 Windows 命令行上執(zhí)行請求。我也嘗試過使用純 JS 而不是 Google Script 語言。我能夠執(zhí)行其他操作,例如搜索 OneDrive 和上傳文件。// The GS codevar auth = "Bearer " + acc;var options = { "method": "post", "headers": { "Authorization": auth, "Content-Type": "application/json" }, "payload": { "name": "Test Folder", "folder": {}, "@name.conflictBehavior": "rename" }, "muteHttpExceptions": true};var reqUrl = "https://graph.microsoft.com/v1.0/me/drive/root/children";var response = UrlFetchApp.fetch(reqUrl, options);var json = JSON.parse(response);Logger.log(json); // The JS codefunction onAuthSuccess(acc) { var pNum = document.getElementById("projectnum").value; var pName = document.getElementById("address").value; var reqUrl = "https://graph.microsoft.com/v1.0/me/drive/root/children"; var reqBody = { "name": "Test Folder", "folder": {}, "@microsoft.graph.conflictBehavior": "rename" }; var auth = "Bearer " + acc; var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { console.log(xhr.responseText); } xhr.open("POST", reqUrl, true); xhr.setRequestHeader("Authorization", auth); xhr.setRequestHeader("Content-Type", "application/json"); xhr.send(reqBody);}// The successful Curl command// curl "https://graph.microsoft.com/v1.0/me/drive/root/children" -X POST -H "Content-Type: application/json" -H %acc% -d "{'name':'Test Folder', 'folder':{}, '@microsoft.graph.conflictBehavior':'rename'}"Curl 命令產(chǎn)生了預(yù)期的結(jié)果,即在我們的 OneDrive 根目錄中創(chuàng)建一個名為“Test Folder”的新文件夾。上面的 GS 和 JS 代碼都會產(chǎn)生以下錯誤消息:{ error = { code = BadRequest, innerError = { date = 2019 - 06 - 24 T20: 40: 52, request - id = ##################### }, message = Unable to read JSON request payload.Please ensure Content - Type header is set and payload is of valid JSON format. }}
1 回答

楊魅力
TA貢獻(xiàn)1811條經(jīng)驗 獲得超6個贊
您的代碼有一個基本問題:您沒有發(fā)布有效的 JSON(即使您的 Header 是這樣說的)。
var reqBody = {
"name": "Test Folder",
"folder": {},
"@microsoft.graph.conflictBehavior": "rename"
};
這只是一個普通的 javascript 對象。.toString()在這上面做一個只會給你"[object Object]"。根據(jù) XHR 文檔,您需要將其編碼為 USVString(基本上是普通字符串)。因此,要使其成為該XHR#send()方法處理的內(nèi)容,請執(zhí)行以下操作:
var reqBody = JSON.stringify({
"name": "Test Folder",
"folder": {},
"@microsoft.graph.conflictBehavior": "rename"
});
結(jié)果是一個字符串:
'{"name":"Test Folder","folder":{},"@microsoft.graph.conflictBehavior":"rename"}'
,這更有用:)
添加回答
舉報
0/150
提交
取消