Чтение содержимого 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);
}
}