从 C# Azure 函数访问 Azure 存储

Access Azure Storage from C# Azure Function

我正在尝试通过 Azure 函数访问 Blob 存储中的内容。我有以下内容:

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;

public static async Task<HttpResponseMessage> Run(HttpRequest req, ILogger log)
{   
    string path = req.Query["path"];   

    string storageConnectionString = "...";
    CloudStorageAccount blobAccount = CloudStorageAccount.Parse(storageConnectionString);
    CloudBlobClient blobClient = blobAccount.CreateCloudBlobClient();
    CloudBlobContainer blobContainer = blobClient.GetContainerReference("content");
    CloudBlockBlob cloudBlockBlob = blobContainer.GetBlockBlobReference(path);*

    return new HttpResponseMessage(HttpStatusCode.OK) {
        Content = /* to do - content of blob */
    };    
}

但是,我很难告诉函数识别 Microsoft.WindowsAzure.Storage 命名空间:

2019-11-07T09:59:57.729 [Error] run.csx(7,17): error CS0234: The type or namespace name 'WindowsAzure' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)

我觉得我在理解 Azure Functions 时遗漏了一些重要的东西,因为从 Azure 函数中引入 namespaces/packages 来使用 Azure 应该不是一个挑战。

非常感谢!

在c# 脚本函数中,您不需要初始化blob 客户端来读取blob。 Azure 函数提供 Blob 绑定到 read/write blob,查看此文档:Blob Input - example.

首先转到您的功能集成,如下图所示设置它。有了这个,只需将 inputBlob 绑定到流式传输以读取内容或绑定到 CloudBlockBlob 类型,然后只需使用 CloudBlockBlob 方法即可。

并且路径支持绑定到容器,在函数中只绑定到CloudBlobContainer类型。

下面是我读取文本文件的测试代码。

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using System.IO;
using System.Collections.Generic;

public static void Run(HttpRequest req, Stream inputBlob,ILogger log)
{
    StreamReader reader = new StreamReader(inputBlob);
    string  oldContent = reader.ReadToEnd();
    log.LogInformation($"oldContent:{oldContent}");  
}

希望这对您有所帮助,如果您还有其他问题,请随时告诉我。