как использовать привязку вывода без необходимости присваивать значение?

#c# #.net #azure-functions

#c# #.net #azure-функции

Вопрос:

Как мне указать привязки вывода, не будучи вынужденным присваивать им значение?

Я могу успешно использовать следующие атрибуты для привязки к 2 расположениям выходных двоичных объектов:

         [Blob("processed/{CorrelationId}", FileAccess.Write, Connection = "OnSchedulingToMMMQueueTriggered:ProcessedPayloadsConnectionString")] out string processedPayload,
        [Blob("success/{CorrelationId}", FileAccess.Write, Connection = "OnSchedulingToMMMQueueTriggered:ProcessedPayloadsConnectionString")] out string success,
  

Однако, поскольку я ничего не присваиваю этому значению out string success , я получаю следующее исключение:

введите описание изображения здесь

Как мне указать привязки вывода, не будучи вынужденным присваивать им значение? — В некоторых случаях я не хочу присваивать какое-либо значение, потому что я просто не хочу записывать в этот большой двоичный объект.

Моя полная функция ниже:

 public static class OnSchedulingToMMMQueueTriggered
{
    [FunctionName("OnSchedulingToMMMQueueTriggered")]
    public static void Run(
        [QueueTrigger("httpqueue", Connection = "OnSchedulingToMMMQueueTriggered:SourceQueueConnection")] Payload myQueueItem,
        [Blob("processed/{CorrelationId}", FileAccess.Write, Connection = "OnSchedulingToMMMQueueTriggered:ProcessedPayloadsConnectionString")] out string processedPayload,
        [Blob("success/{CorrelationId}", FileAccess.Write, Connection = "OnSchedulingToMMMQueueTriggered:ProcessedPayloadsConnectionString")] out string success,
        ILogger log)
    {
        log.LogInformation($"C# Queue trigger function processed: {myQueueItem.Body}");

        processedPayload = "this shoudl be the body of the string";
    }
}
  

Ответ №1:

Если вы используете определенный параметр «out», он потребуется. Если вывод является условным, подумайте о том, чтобы просто создать привязку BlobContainer и использовать ее только в том случае, если вам это нужно. Для этого потребуется, чтобы вы сами создали большой двоичный объект, используя GetBlockBlobReference , но это всего лишь небольшой дополнительный код, чтобы обойти проблему. У меня не было возможности протестировать этот код ниже, поэтому вам, возможно, придется его немного подправить.

 public static class OnSchedulingToMMMQueueTriggered
{
    [FunctionName("OnSchedulingToMMMQueueTriggered")]
    public static void Run(
        [QueueTrigger("httpqueue", Connection = "OnSchedulingToMMMQueueTriggered:SourceQueueConnection")] Payload myQueueItem,
        [Blob("processed/{CorrelationId}", FileAccess.Write, Connection = "OnSchedulingToMMMQueueTriggered:ProcessedPayloadsConnectionString")] out string processedPayload,
        [Blob("success", FileAccess.Write, Connection = "OnSchedulingToMMMQueueTriggered:ProcessedPayloadsConnectionString"))] CloudBlobContainer outputSuccessContainer,
        ILogger log)
    {
        log.LogInformation($"C# Queue trigger function processed: {myQueueItem.Body}");

        processedPayload = "this shoudl be the body of the string";

        if (outputNeeded) {
            var blockBlob = outputSuccessContainer.GetBlockBlobReference(CorrelationId   ".txt");
            await blockBlob.UploadText(processedPayload);
            blockBlob.Properties.ContentType = "text/plain";
            blockBlob.SetProperties();
        }
    }
}
  

Комментарии:

1. я предполагаю, что мне нужно будет выполнить outputSuccessContainer.CreateIfNotExistsAsync(); сначала перед запуском UploadTextAsync() ?

2. Да, если вы не можете быть уверены, что контейнер, на который вы ссылаетесь, уже существует, тогда было бы разумно вызвать await outputSuccessContainer.CreateIfNotExistsAsync();