我在.Net标准2.0中具有功能:
from django.http.response import HttpResponse
import zipfile
def post(self, request)
student_photo_url_1 = '%s/photo.jpg'
archive = zipfile.ZipFile(request.FILES.get('files'), 'r')
add_file(archive.open(self.student_photo_url_1 % 'student name'))
file_instance = FileModel.objects.create(
file=File(file.getvalue()),
file_id='',
file_meta=FileMeta.objects.get(name='Student Photo')
)
return HttpResponse('Ok')
根据本文:https://docs.microsoft.com/en-us/azure/azure-functions/functions-run-local部分“非HTTP触发的函数”
“对于除HTTP触发器和Webhooks以外的所有其他功能,您可以通过调用管理端点在本地测试您的功能。在本地服务器上使用HTTP POST请求调用此端点会触发该功能。您可以选择传递测试数据到POST请求正文中的执行。此功能类似于Azure门户中的“测试”选项卡。
您调用以下管理员端点来触发非HTTP功能:“
[FunctionName("A_Test")]
public static async Task<string> Test(ILogger log, ExecutionContext context)
{
log.LogInformation("test");
return "hello";
}
我应该能够使用以下方法测试非HTTP触发的功能:
http://localhost:{port}/admin/functions/{function_name}
但是,当以调试方式运行时,我得到的只是一个400错误:
curl --request POST -H "Content-Type:application/json" --data '{}' http://localhost:7071/admin/functions/A_Test -v
为什么?
答案 0 :(得分:0)
您的函数没有与之关联的任何触发器,这很可能未被标识为触发器。例如,您可以添加一个计时器触发器。
以下方法/技巧也可能适用:当我有一个非HTTP触发器并想在本地对其进行测试时,我会将实际逻辑提取到其自己的类中。然后,我打开一个单独的HTTP触发器,该触发器仅用于测试。
答案 1 :(得分:0)
这里的问题是,curl在POST请求的实际正文中包含来自--data '{}'
的引号。
Azure函数期望这种身体:
{}
实际上,curl发送此消息:
'{}'
解决方案是不对--data参数使用引号,例如:
curl --request POST -H "Content-Type:application/json" --data {} http://localhost:7071/admin/functions/A_Test -v