如何修复创建OneDrive文件夹时错误请求错误"Unable to read JSON request payload"?



我正在在Google表中创建一个对话框,该对话框生成并将报告上传到OneDrive。用户可能需要通过对话框在OneDrive中创建一个文件夹。但是,在提出API请求时,我会遇到" BadRequest"错误。

我尝试使用卷发在Windows命令行上执行请求。我还尝试使用纯JS代替Google脚本语言。我能够执行其他操作,例如搜索OneDrive和上传文件。

// The GS code
var 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 code
function 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命令会产生预期的结果,即在我们的OneDrive根目录中创建一个名为" Test Folder"的新文件夹。

上面的GS和JS代码都会产生以下错误消息:

{
    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.
    }
}

您的代码有一个基本问题:您不发布有效的JSON(即使您的标题如此这样(。

var reqBody = {
    "name": "Test Folder",
    "folder": {},
    "@microsoft.graph.conflictBehavior": "rename"
};

这只是一个普通的JavaScript对象。对此进行.toString()只会给您"[object Object]"。您需要根据XHR文档将其编码为USVString(基本上是正常字符串(。因此,要将其变成XHR#send()方法处理的东西,请执行此操作:

var reqBody = JSON.stringify({
    "name": "Test Folder",
    "folder": {},
    "@microsoft.graph.conflictBehavior": "rename"
});

结果是一个字符串:

'{"name":"Test Folder","folder":{},"@microsoft.graph.conflictBehavior":"rename"}'

,更可用:(

相关内容

最新更新