Чтение содержимого BLOB-объекта из лазурной функции

Я пытаюсь прочитать содержимое BLOB-объекта внутри лазурной функции.

Вот код:

Примечание: если я закомментирую блок using и верну blob, т.е.

вернуть новый OkObjectResult(blob);

Я возвращаю объект BLOB-объекта.

Однако, если я использую блок использования, я получаю 500.

Есть идеи, почему я не могу получить контент?

string storageConnectionString = "myConnectionString";
CloudStorageAccount storageAccount;
CloudStorageAccount.TryParse(storageConnectionString, out storageAccount);
CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = cloudBlobClient.GetContainerReference("drawcontainer");


var blob = drawingsContainer.GetBlockBlobReference("notes.txt");

using (StreamReader reader = new StreamReader(blob.OpenRead()))
{
    content = reader.ReadToEnd();
}
return new OkObjectResult(content);

2 ответа

HTTP 500 указывает, что в коде есть ошибка. Наиболее вероятная причина ошибки - переменнаяcontent. Определите переменную 'content' вне блока using в качестве области действия content переменная, определенная внутри, ограничена только блоком. Объявите это вне блока using, что-то вроде ниже:

    try
    {
        string content = string.Empty;
        using (StreamReader reader = new StreamReader(blob.OpenRead()))
        {
            content = reader.ReadToEnd();
        }
    }
    catch (Exception ex)
    {
        // Log exception to get the details.    
    }

Всегда используйте try catch для получения более подробной информации об ошибках в коде.

Метод OpenRead не существовал, поэтому я использовал асинхронный метод, и он решил его.

Я пришел к этому решению после создания функции Azure в VS и публикации ее, и она работает.

Вот код, который я использовал:

 public static class Function1
{
    [FunctionName("Function1")]
    public static async Task<ActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequest req, TraceWriter log)
    {
        log.Info("C# HTTP trigger function processed a request.");
        string storageConnectionString = "DefaultEndpointsProtocol=https;AccountName=avitest19a1c;AccountKey=<AccessKey>";
        CloudStorageAccount storageAccount = null;
        CloudStorageAccount.TryParse(storageConnectionString, out storageAccount);
        CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
        CloudBlobContainer drawingsContainer = cloudBlobClient.GetContainerReference("drawcontainer");

        var blob = drawingsContainer.GetBlockBlobReference("notes.txt");

        string content = string.Empty;
        **var contentStream = await blob.OpenReadAsync();**
        using (StreamReader reader = new StreamReader(contentStream))
        {
            content = reader.ReadToEnd();
        }

        return new OkObjectResult(content);

    }
}
Другие вопросы по тегам