我正在尝试使用自定义绑定和模式来创建HTTP触发的Azure函数,该函数从Blob存储中获取文件。在我的情况下,POST HTTP请求将知道附件名称。 在this article中,文档使用csx脚本讨论模式,我在Visual Studio中使用预先编写的C#Azure函数。我试图将其转换为以下内容,但它会引发运行时异常:
以下1个函数出错: 运行:Microsoft.Azure.WebJobs.Host:错误索引方法'HttpTriggerGetAttachmentBlob.Run'。 Microsoft.Azure.WebJobs.Host:“附件”没有绑定参数。
以下是代码:
public class BlobInfo
{
public string Attachment { get; set; }
}
public static class HttpTriggerGetAttachmentBlob
{
[FunctionName("HttpTriggerGetAttachmentBlob")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function,
"post")]
HttpRequestMessage req,
TraceWriter log,
[Blob("strings/{Attachment}")] string blobContents,
BlobInfo blobInfo)
{
if(blobContents == null) {
return req.CreateResponse(HttpStatusCode.NotFound);
}
return req.CreateResponse(HttpStatusCode.OK, new
{
data = $"{blobContents}"
});
}
}
如何知道从触发事件进入的文件名,检索Blob存储文件?
答案 0 :(得分:1)
诀窍实际上是将HttpTrigger
属性放在blobInfo
参数上,而不是req
:
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req,
TraceWriter log,
[Blob("strings/{Attachment}")] string blobContents,
[HttpTrigger(AuthorizationLevel.Function, "post")] BlobInfo blobInfo)
这将告诉运行时您绑定到BlobInfo
类,并且它将能够派生{Attachment}
模板绑定。
注意:确保在重新编译之前删除bin
文件夹,工具并不总是正确更新现有的function.json
文件。