具有Beta运行时的JavaScript Azure函数不会为错误HTTP响应返回响应主体

时间:2018-07-14 07:48:57

标签: javascript azure azure-functions azure-functions-runtime

使用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运行时,是否需要以其他方式返回响应主体?

1 个答案:

答案 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中修复。