我正在尝试使用自定义绑定和模式来创建从 Blob 存储获取文件的 HTTP 触发的 Azure 函数。就我而言,POST HTTP请求将知道附件名称。在本文中,文档讨论了使用 csx 脚本的模式,我在 Visual Studio 中使用了预编译的 C# Azure Functions。我试图将其转换为以下内容,但它引发了运行时异常:
以下 1 个函数出错: Run: 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 存储文件?
诀窍实际上是将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
文件。