-1

编辑 12.1 16:21 EST:所以我缩小了范围。这有效(python3):

ptc = req.params.get('name')
    assets = req.params.get('assets')
    if not ptc:
        try:
            req_body = req.get_json()
            
        except ValueError:
            pass
        else:
            ptc = req_body.get('name')
            assets = req_body.get('assets')
            
            
    if ptc:
        
        return func.HttpResponse(f"Hello boogerface, {ptc}, {assets}. 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
        )

当我去掉条件并尝试使用 except 语句使其看起来像这样(python3)时:

ptc = req.params.get('name')
assets = req.params.get('assets')
req_body = req.get_json()
ptc = req_body.get('name')
assets = req_body.get('assets')  
return func.HttpResponse(f"Hello, {ptc}, {assets}. This HTTP triggered function executed successfully.")

它失败。浏览器中的 HTTP 500 和:

HTTP 请求不包含有效的 JSON 数据

作为错误代码

谁能告诉我为什么第二组不起作用? 因为它只是没有 if/thens 和 try exceptions 的代码。我只是不认为这会产生太大的不同。我完全希望它能够工作。当我的意思是工作时,它会显示在浏览器窗口中:

成功

结束编辑

我在用 Python 编写的 Visual Studio Code (VSC) 中创建了一个 httptrigger。我正在尝试重建 URL(不在代码中,只是为了使用 URL 测试通过浏览器的调用)。

到目前为止我所做的: 当我从 VSC 中执行函数并将 JSON 字符串作为 JSON 字符串传递时(在执行窗口中) - 例如 {"var1":"value1","var2":"value2"}对于与我的代码中的变量匹配的任意数量的参数,它会成功运行。

浏览器是另一回事。

例如,当我有 ONE 参数传入 URL 时(以下不是实际 URL):

http://localhosturl/thisapi?var1=OHMYGOSH

没有引号也没有任何编码,HttpResponse 就可以了。它给了我浏览器中的参数值。 此时将值返回给浏览器对我来说只是一个调试步骤。

现在,当我在 URL 中有多个值时,例如:

http://localhosturl/thisapi?var1=OHMYGOSH&var2=THISISCRAZY

我在本地主机的浏览器中收到 HTTP ERROR 500。在终端中,我收到错误解释:

HTTP 请求不包含有效的 JSON 数据

JSON 字符串在参数化 URL 中的外观如何?是我的终极问题。我到处都看过。我已经尝试或调查过:

  • URL 编码 (?"URL 编码字符串")
  • Base64 编码 (?"Base64encoded string")
  • 还有 ?req="URLorBase64encodedstring" 因为 req 是它被传递到的参数
  • 直接 - 如上面的示例 URL
  • 提供以编程方式在代码内创建它的解决方案(这是我不想做的)

我只想构造一个传递多个值的 URL,以使 API 调用暂时在浏览器中工作。

为什么?因为当我将它部署到服务器时,我想要另一个脚本来构造一个 URL来进行调用,这样我就可以在计算后接收这些值。所以我需要知道我可以发送的最终 URL 是什么样的。

同样,我搜索了 stackoverflow 和许多其他网站。

提前致谢!

4

1 回答 1

0

在 Visual Studio Code 中创建 Azure httpTrigger 时,您将获得一个 if(如果不是)then/try,但默认情况下工作正常的结构除外。我发现如果你删除条件语句并尝试在它之外运行它,它似乎不起作用。

因此,我没有尝试以编程方式解决这个问题,而是继续接受了这个结构,它工作得很好。注意:在 Visual Studio Code 中进行测试时,您会将 JSON 传递到测试字段中,但是当在浏览器 URL 中传递它以进行本地测试时,参数以文字形式传递,因此您必须在以下情况下使用 req.params.get分配变量而不是用 json.dumps() 转储它。您可能必须更改条件以在输入时测试 JSON 格式,但这取决于您的函数的用例。

于 2021-12-02T19:10:58.353 回答