0

我正在尝试读取 azure 函数中 blob 的内容。

这是代码:

注意:如果我注释掉 using 块并返回 blob 即

返回新的 OkObjectResult(blob);

我取回了 blob 对象。

但是,如果我使用 using 块,我会得到 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);
4

2 回答 2

1

HTTP 500 表示代码有错误。最可能的错误原因是变量“内容”。在 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 来获取有关代码中错误的更多详细信息。

于 2019-08-02T19:54:55.847 回答
1

OpenRead 方法不存在,所以我使用了异步方法并解决了它。

在 VS 中创建一个 azure 函数并将其发布后,我得到了这个解决方案,它可以工作。

这是我使用的代码:

 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);

    }
}
于 2019-08-03T13:59:26.277 回答