我需要绑定到输出blob,但blob路径需要在我的函数中动态计算。我该怎么做?
答案 0 :(得分:24)
Binder
是一种高级绑定技术,允许您在代码中执行绑定强制,而不是通过function.json
元数据文件执行声明性 。如果绑定路径或其他输入的计算需要在函数运行时发生,则可能需要执行此操作。请注意,使用Binder
参数时,不应在function.json
中为该参数添加相应的条目。
在下面的示例中,我们动态绑定到blob输出。正如您所看到的,因为您在代码中声明了绑定,所以可以按照您希望的任何方式计算路径信息。请注意,您也可以绑定到任何其他原始绑定属性(例如QueueAttribute
/ EventHubAttribute
/ ServiceBusAttribute
/等。)您也可以迭代地多次绑定。< / p>
请注意,传递给BindAsync
的类型参数(在本例中为TextWriter
)必须是目标绑定支持的类型。
using System;
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}");
// determine the path at runtime in any way you choose
string path = "samples-output/path";
using (var writer = await binder.BindAsync<TextWriter>(new BlobAttribute(path)))
{
writer.Write("Hello World!!");
}
return new HttpResponseMessage(HttpStatusCode.OK);
}
以下是相应的元数据:
{
"bindings": [
{
"name": "req",
"type": "httpTrigger",
"direction": "in"
},
{
"name": "res",
"type": "http",
"direction": "out"
}
]
}
绑定重载采用数组属性。如果您需要控制目标存储帐户,则传入一组属性,从绑定类型属性(例如BlobAttribute
)开始,并包含指向要使用的帐户的StorageAccountAttribute
实例。例如:
var attributes = new Attribute[]
{
new BlobAttribute(path),
new StorageAccountAttribute("MyStorageAccount")
};
using (var writer = await binder.BindAsync<TextWriter>(attributes))
{
writer.Write("Hello World!");
}
答案 1 :(得分:7)
整合了其他帖子中的所有信息以及评论,并创建了一个blog post,演示了如何将Binder与真实场景结合使用。感谢@mathewc,这成为可能。