Привязка к пользовательским свойствам ввода в предварительно скомпилированных функциях Azure C#
Я пытаюсь использовать пользовательские привязки и шаблоны для создания функции Azure, запускаемой по протоколу HTTP, которая получает файл из хранилища BLOB-объектов. В моем случае запрос HTTP POST будет знать имя вложения. В этой статье документы обсуждают шаблон с использованием сценариев csx, я использую предварительно скомпилированные функции C# Azure в Visual Studio. Я попытался перевести его на следующее, но он вызывает исключение во время выполнения:
Следующие 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-объектов, зная имя файла, полученное из события Triggered?
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
файл правильно.