您实际上已经可以在 C# Azure Functions 中执行此操作,并且我们在我们的存储库中有一个跟踪项,以便也为 Node.js Functions 启用此功能。我们很快就会做到这一点。
下面是一个示例工作函数,它绑定到具有在运行时指定的路径的 blob 。由于在幕后 Azure Functions 是基于Azure WebJobs SDK构建的,因此您会注意到这依赖于使用Binder
您可能不熟悉的 WebJobs SDK。IBinder
有关/的更多文档,请参阅 WebJobs SDK Binder
。在 WebJobs SDK 中,声明性属性用于绑定(例如QueueAttribute
/ TableAttribute
/BlobAttribute
等)。您可以在运行时通过Binder
. 在 Azure Functions 中,我们使用外部元数据来描述绑定,但在此高级方案中,您有一个混合。注意使用Binder
的时候没有对应的绑定function.json
。有关更多详细信息Binder
动态绑定看到这个SO question/answer。
通常,您会发现 Azure Functions 中可以使用许多很棒的 WebJobs SDK 功能 - 我们的文档只需要跟上步伐,让人们意识到这一点 :)
另一件需要注意的事情:有一些内置支持可以为输出生成随机的新标识符。例如,如果您将输出 blob 路径设置为test-output/{rand-guid},系统将自动为您生成一个新 ID。如果这满足您的需求,那么您不需要Binder
.
using System;
using System.IO;
using System.Net;
using Microsoft.Azure.WebJobs;
public static async Task<HttpResponseMessage>
Run(HttpRequestMessage req, Binder binder, TraceWriter log)
{
log.Verbose($"C# HTTP function processed RequestUri={req.RequestUri}");
using (var writer = await binder.BindAsync<TextWriter>(
new BlobAttribute("test-output/result")))
{
writer.Write("Hello World!!");
}
return new HttpResponseMessage(HttpStatusCode.OK);
}
对于第二个问题,如果您想有条件地写入输出绑定,请不要为绑定分配任何值 - 不应产生任何输出。