Bir çıkış bloğuna bağlanmam gerekiyor, ancak blob yolunun işlevimde dinamik olarak hesaplanması gerekiyor. Nasıl yaparım?C# İşlevimde dinamik bağlamaları gerçekleştirmek için Ciltçi'yi nasıl kullanırım?
cevap
Binder
function.json
meta dosyası üzerinden bildirimli aksine kodunuzda imperatively bağlamaları gerçekleştirmek sağlayan gelişmiş bağlama tekniğidir. Bağlama yolunun veya diğer girdilerin hesaplamasının işlevinizdeki çalışma zamanında gerçekleşmesi gereken durumlarda bunu yapmanız gerekebilir. Bir Binder
parametresi kullanıldığında, 'un değil, bu parametre için function.json
karşılık gelen bir girdi içermesi gerektiğini unutmayın.
Aşağıdaki örnekte, blob çıktısına dinamik olarak bağlanıyoruz. Görebildiğiniz gibi, kodda bağlayıcı olduğunu beyan ettiğiniz için, yol bilginiz herhangi bir şekilde hesaplanabilir. Diğer ham ciltleme özelliklerine de bağlayabileceğinizi unutmayın (ör. QueueAttribute
/EventHubAttribute
/ServiceBusAttribute
/etc.) Birden çok kez bağlamak için yinelemeli olarak da yapabilirsiniz.
BindAsync
'a aktarılan tip parametresinin (bu durumda TextWriter
) hedef bağlanmanın desteklediği bir tür olması gerektiğini unutmayın. Burada
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);
}
Ve tekabül meta geçerli:
niteliklerin bir dizisi almak bağlamak aşırı yükler vardır{
"bindings": [
{
"name": "req",
"type": "httpTrigger",
"direction": "in"
},
{
"name": "res",
"type": "http",
"direction": "out"
}
]
}
. Hedef depolama hesabını denetlemeniz gereken durumlarda, bağlama türü özniteliğinden başlayarak (ör. BlobAttribute
) ve kullanmak için hesaba işaret eden bir StorageAccountAttribute
örneğini içeren bir öznitelik koleksiyonunu geçirirsiniz. Örneğin:
var attributes = new Attribute[]
{
new BlobAttribute(path),
new StorageAccountAttribute("MyStorageAccount")
};
using (var writer = await binder.BindAsync<TextWriter>(attributes))
{
writer.Write("Hello World!");
}
Blob yolu, gelen bir nesneden gelmeyen ve çalışma zamanında hesaplanan bilgi içermesi durumunda, yolu ile kullanmak mümkün mü? –
Belki de cehaletim, ancak bağlamalarda herhangi bir yerde herhangi bir depolama hesabı belirtilmemişse, çıktı için hangi depolama hesabı kullanılacaktır? –
Bu noktada, yol sadece bir dizedir. İstediğin gibi hesaplayabilirsin. Varsayılan olarak AzureWebJobsSdkStorage uygulama ayarı tarafından belirtilen varsayılan depolama hesabı kullanılır. Parametre türünüzü Binder (IBinder'ın aksine) olarak değiştirerek kullanılan depolama hesabını geçersiz kılabilirsiniz. Bir dizi özniteliği alan bir aşırı yük var. Daha sonra bir StorageAccountAttribute ile gerçek bağlama özniteliğini birlikte geçirebilirsiniz. Bağlama niteliğinin önce gelmesi gerekiyor. Yukarıdaki ayrıntıları ekleyeceğim. – mathewc