编辑 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 和许多其他网站。
提前致谢!