我只是尝试调用用Azure创建的机器学习实验的REST API端点,但一直收到以下错误消息:
{ "error": { "code": "BadArgument", "message": "提供了无效的参数。", "details": [ { "code": "RequestBodyInvalid", "message": "未提供请求体或请求体反序列化时出错。" } ] }}
我查看了他们的文档:https://learn.microsoft.com/en-us/azure/machine-learning/machine-learning-web-service-error-codes
文档中只提到我的请求体是空的,但我不知道为什么会是空的,以下是我的代码:
router.post('/rating/new', function(req, res) { var postData = { "Inputs": { "input2": [ { 'Col1': "A11", 'Col2': "6", 'Col3': "A34", 'Col4': "A43", 'Col5': "1169", 'Col6': "A65", 'Col7': "A75", 'Col8': "4", 'Col9': "A93", 'Col10': "A101", 'Col11': "4", 'Col12': "A121", 'Col13': "67", 'Col14': "A143", 'Col15': "A152", 'Col16': "2", 'Col17': "A173", 'Col18': "1", 'Col19': "A192", 'Col20': "A201", 'Col21': "1", } ], }, "GlobalParameters": { } }; // 配置请求 var options = { url: config.ML_PREDICTIVE.url, method: 'POST', headers: { 'Content-Type':'application/json', 'Authorization':('Bearer ' + config.ML_PREDICTIVE.apiKey)}, form: postData } console.log(JSON.stringify(options)); // 发起请求 request.post(options, function (error, response, body) { if(error){ res.status(403).send(error); } if(response.statusCode != 200){ res.status(403).send(response.body); } if (!error && response.statusCode == 200) { console.log(body) } })});
我唯一能想到的问题是,请求中的”form”可能不被Azure视为请求体,我尝试过使用”body”也无济于事。
请帮助我!
回答:
根据你提供的代码,变量postData
不是有效的JSON字符串。你需要使用JSON.stringify()
方法将postData
的值转换为JSON字符串,然后再发送POST请求。