Как использовать Binder для выполнения динамических привязок в моей функции C#?
Мне нужно привязать к выходному BLOB-объекту, но путь BLOB-объекта должен динамически вычисляться в моей функции. Как мне это сделать?
2 ответа
Binder
является продвинутой техникой привязки, которая позволяет вам обязательно выполнять привязки в вашем коде, а не декларативно через function.json
файл метаданных. Это может потребоваться в случаях, когда вычисление пути привязки или других входных данных должно происходить во время выполнения вашей функции. Обратите внимание, что при использовании Binder
параметр, вы не должны включать соответствующую запись в function.json
для этого параметра.
В приведенном ниже примере мы динамически привязываемся к выводу BLOB-объекта. Как видите, поскольку вы объявляете привязку в коде, информация о вашем пути может быть вычислена любым способом, который вы пожелаете. Обратите внимание, что вы также можете привязать к любому из других необработанных атрибутов привязки (например, QueueAttribute
/ EventHubAttribute
/ ServiceBusAttribute
/ и т. д.) Вы также можете сделать это многократно, чтобы связать несколько раз.
Обратите внимание, что параметр типа передан 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!");
}