在Async方法中绑定到输出Blob时,将Blob绑定到IAsyncCollector时出错 [英] Error binding Blob to IAsyncCollector when binding to output blob in Async method
问题描述
在这篇文章之后,我正尝试在Async方法中绑定到Blob输出:
I'm trying to bind to a blob output in an Async method following this post: How can I bind output values to my async Azure Function?
我有多个输出绑定,所以不能返回
I have multiple output bindings so just returning is not an option
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, IAsyncCollector<string> collection, TraceWriter log)
{
if (req.Method == HttpMethod.Post)
{
string jsonContent = await req.Content.ReadAsStringAsync();
// Save to blob
await collection.AddAsync(jsonContent);
return req.CreateResponse(HttpStatusCode.OK);
}
else
{
return req.CreateResponse(HttpStatusCode.BadRequest);
}
}
我对Blob的绑定是:
My binding for the blob is :
{
"bindings": [
{
"authLevel": "function",
"name": "req",
"type": "httpTrigger",
"direction": "in"
},
{
"name": "$return",
"type": "http",
"direction": "out"
},
{
"type": "blob",
"name": "collection",
"path": "testdata/{rand-guid}.txt",
"connection": "test_STORAGE",
"direction": "out"
}
],
"disabled": false
}
但是只要我这样做,我都会得到以下信息:
But whenever I do this I get the following:
错误:函数($ WebHook)错误: Microsoft.Azure.WebJobs.Host:错误索引方法 'Functions.WebHook'. Microsoft.Azure.WebJobs.Host:无法绑定 Blob输入 'Microsoft.Azure.WebJobs.IAsyncCollector`1 [System.String]'
Error: Function ($WebHook) Error: Microsoft.Azure.WebJobs.Host: Error indexing method 'Functions.WebHook'. Microsoft.Azure.WebJobs.Host: Can't bind Blob to type 'Microsoft.Azure.WebJobs.IAsyncCollector`1[System.String]'
推荐答案
Collectors are not supported for Blob output bindings, see this issue.
对于可变数量的输出Blob(在您的情况下为0或1,但可以是任意数量),您将必须使用命令式绑定.从function.json
中删除collection
绑定,然后执行以下操作:
For variable amount of output blobs (0 or 1 in your case, but can be any), you would have to use imperative bindings. Remove collection
binding from your function.json
and then do this:
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, Binder binder)
{
if (req.Method == HttpMethod.Post)
{
string jsonContent = await req.Content.ReadAsStringAsync();
var attributes = new Attribute[]
{
new BlobAttribute("testdata/{rand-guid}.txt"),
new StorageAccountAttribute("test_STORAGE")
};
using (var writer = await binder.BindAsync<TextWriter>(attributes))
{
writer.Write(jsonContent);
}
return req.CreateResponse(HttpStatusCode.OK);
}
else
{
return req.CreateResponse(HttpStatusCode.BadRequest);
}
}
这篇关于在Async方法中绑定到输出Blob时,将Blob绑定到IAsyncCollector时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!