在 python 中的 azure 函数应用程序的 `req.get_json()` 中没有得到 json 输入

Not getting json input in `req.get_json()` in azure function app in python

我之前在 azure 函数应用程序中创建了几个 api。我曾使用 req.get_json() 来获取 json 输入参数,但突然停止了。 req.get_json() 的值给我错误 ValueError: HTTP request does not contain valid JSON data。我尝试了以下基本代码示例。它给了我同样的错误。

def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')

    if name:
        return func.HttpResponse(f"Hello, {name}. This HTTP triggered function executed successfully.")
    else:
        return func.HttpResponse(
             "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
             status_code=200
        )

curl 命令:

curl --location --request POST 'http://localhost:7071/api/dev-test' \
> --header 'Content-Type: application/json' \
> --data-raw '{"name":"test-dev"}​'

curl 的输出:

This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.

这可能是由于在复制时引入了额外的字符。您可以删除该行参数并手动输入请求参数。应该没有问题了。

手动输入这一行:

--data-raw '{"name":"test-dev"}​'

我以前遇到过同样的问题,我认为这主要是邮递员的问题。您可以从市场下载 postcode vscode 扩展并测试使用它。

curl 命令中,您可能还会遇到上面 Frank 提到的问题。要消除该问题,您可以改为创建一个 JSON 文件并将您的 json 数据粘贴到其中,然后尝试像这样使用 curl:curl --location --request POST "http://localhost:7071/api/dev-test" --header 'Content-Type: application/json' -d @test.json 其中 test.json 将包含您的 json 数据。它可能有效也可能无效。