使用Beta运行时上的Javascript Azure函数时,我遇到一个问题,如果该函数返回成功响应(200、201),则将从context.res返回的响应主体正确返回。
但是,如果HTTP状态设置为400或404,则无论函数中设置了什么响应主体,客户端都会在响应主体中获得标准响应,例如“错误请求”。
即使在自动生成的Java脚本函数中,我也可以重现此内容。
代码(标准的自动生成代码)
module.exports = function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
if (req.query.name || (req.body && req.body.name)) {
context.res = {
// status: 200, /* Defaults to 200 */
body: "Hello " + (req.query.name || req.body.name)
};
}
else {
context.res = {
status: 400,
body: "Please pass a name on the query string or in the request
body"
};
}
context.done();
};
在v1运行时中,如果未在查询或请求正文中指定名称,则HTTP状态设置为400,并且响应正文正确包含“请在查询字符串或请求正文中传递名称”。
在Beta运行时中,HTTP状态设置为400,但响应正文仅包含“错误请求”
对于Beta运行时,是否需要以其他方式返回响应主体?
答案 0 :(得分:1)
代码很好,这是Beta运行时的已知问题。
请参阅Azure Functions Runtime 2.0.11888 Announcement。
HttpTrigger无法正确返回响应内容。例如,以下代码将返回“错误请求”,而不是“请在查询字符串或请求正文中传递名称”:
return new BadRequestObjectResult("Please pass a name on the query string or in the request body");
如果这是阻止程序,则可以通过将FUNCTIONS_EXTENSION_VERSION设置为2.0.11857-alpha(在“应用程序”设置中)来使用以前的版本。
更新
此问题已从2.0.11933中修复。