通过URL将参数传递给Python Azure函数

3

我正在尝试通过Azure Functions使Python的hello world示例运行起来。基本函数尝试通过URL获取输入名称,然后响应“Hello Name”。结果发现,通过Azure门户可用的示例模板不能直接使用。基本示例如下:

import os
import json

postreqdata = json.loads(open(os.environ['req']).read())
response = open(os.environ['res'], 'w')
response.write("hello world from "+postreqdata['name'])
response.close()

两个环境变量req和res是存储函数输入输出的临时文件的路径,格式为json。其想法是通过url传递的输入应该在由json.loads()返回的字典中可用。唯一的问题在于,无论我做什么,位于os.environ ['req']的文件始终为空。

os.path.isfile(os.environ['req'])
# Returns True so the file is located at:
# D:\local\Temp\Functions\Binding\79fcec12-baf3-470e-87c3-113f64ffcef0\req
# during the execution

我也尝试了Hello world JavaScript示例,它可以直接在Azure Functions上运行。当我在Azure门户中执行Python脚本时,它能够正常工作,但是在从Web浏览器触发时失败了。
该函数在Python 2.7.13上运行,扩展名为“&name=MyName”到https地址。
我认为错误不在脚本本身,而是隐藏在某个地方。有人尝试过相同的操作吗?
2个回答

3
您所提到的默认示例(源代码在这里)接受http POST请求,并要求您的请求体为具有“name”属性的JSON负载。
为了访问URL查询参数,我们将它们作为独立的环境变量提供给您。例如,如果您发送查询参数“foo”,则可以通过os.environ ['req_query_foo']访问它。

对于带有调用URL中变量的REST API,C#可以使用Route = "Location/{locationName}/Time/{hhmmStr}/"来实现。但是Python怎么做呢? - user160357

0
我也遇到了这个问题。 this链接上的示例说要使用类型为的url进行测试。
https://<app_name>.azurewebsites.net/api/MyHttpTrigger?name=<yourname>

在本地测试时,这种格式可以工作,但我最终发现,在部署后进行测试时,它在命令行中给出的链接类型不正确。

https://<appname>.azurewebsites.net/api/MyHttpTrigger?code=<randomcode>/<randomcode>==

这是你真正需要的。将&name=<yourName>添加到此链接中。我的适用于

https://<appname>.azurewebsites.net/api/MyHttpTrigger?code=<randomcode>/<randomcode>==&name=<yourName>

不确定你是否已经尝试过这个,因为你的问题并不是很清楚,但希望这可以帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接