Azure golang 函数不接收正文中的请求负载

Azure golang function does not receive request payload in the body

我在 Go 中创建了一个 Azure 函数。该函数在具有 GET & POST 请求的本地计算机中正常工作。发布后,通过 POST 发送的请求负载在请求对象中不可用。 这是我的代码:

# Main function
mux := http.NewServeMux()
mux.HandleFunc("/hello", helloWorld)
logrus.Fatal(http.ListenAndServe(":"+httpInvokerPort, mux))

# helloWorld function
func helloWorld(w http.ResponseWriter, r *http.Request) {
    logrus.Info("hello: inside helloWorld")

    bodyBuffer, err := ioutil.ReadAll(r.Body)
    if err != nil {
        logrus.Info("error while reading:" + err.Error())
        w.Write([]byte("GO: error in reading request body"))
    } else {
        logrus.Info("body : " + string(bodyBuffer))

        w.Write([]byte("GO: return hello"))
    }
}

部署后,我使用以下 JSON 正文调用 POST api 请求:

{ 
    "a": "b"
}

在日志中,我看到:

time="2020-07-31T01:14:11Z" level=info msg="body : "

function.json:

{
    "bindings": [
        {
            "authLevel": "anonymous",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req",
            "methods": ["get", "post"]
        },
        {
            "type": "http",
            "direction": "out",
            "name": "res"
        }
    ]
}

我的代码托管在这里:https://github.com/mpurusottamc/azurefunc-go

关于如何调试这个有什么建议吗?

这是基于 Windows OS 的函数应用程序的问题。当我将 OS 类型更新为 Linux 时,我开始接收请求负载。

这是我的 functionapp 创建命令:

az functionapp create --resource-group hellogogrplinux --os-type Linux --consumption-plan-location eastus --runtime node --runtime-version 10 --functions-version 3 --name hellogoapplinux --storage-account hellogostglinux

这是我更新的日志:

time="2020-08-06T03:21:38Z" level=info msg="body : {\n \"a\": \"b\"\n}"

这是 Azure Functions 主机上的一个已知问题,现已解决。本周将作为运行时版本的一部分推出:3.0.14251

此 github 问题有更多详细信息:https://github.com/Azure/azure-functions-host/issues/6444