来自HttpTriggerFunction的Azure函数访问CloudBlobContainer

时间:2018-07-06 13:47:26

标签: c# azure azure-storage azure-functions

对于Azure Functions来说,这是非常新的,并且感到非常沮丧。

我要做的就是在HttpTriggerFunction的“ get”请求上执行,然后从CloudBlobContainer返回流内容。

我真的不明白为什么这么难。只是尝试使用Azure Functions托管SPA。

类似这样

  public static class UIHandler
{
    [FunctionName("UIHandler")]
    public static async Task<HttpResponseMessage> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)]HttpRequest req, 
        TraceWriter log, 
        CloudBlobContainer container)
    {
        log.Info("C# HTTP trigger function processed a request.");
        var stream = await container.GetBlockBlobReference({Infer file name from request here}).OpenReadAsync();

        return new HttpResponseMessage()
        {
            StatusCode = HttpStatusCode.OK,
            Content = new StreamContent(stream)
        };

    }
}

当我尝试运行此程序时,出现以下错误。

  

运行:Microsoft.Azure.WebJobs.Host:错误索引方法   'UIHandler.Run'。 Microsoft.Azure.WebJobs.Host:无法绑定参数   “容器”以键入CloudBlobContainer。确保参数类型   绑定支持。如果您使用的是绑定扩展名(例如   ServiceBus,Timer等),以确保您已致电注册   启动代码中扩展名的方法(例如   config.UseServiceBus(),config.UseTimers()等)。

我正在使用Azure Functions2。我从网络上看不到如何为此设置浏览扩展。 Iv'e还研究了输入和输出绑定。当您使用似乎仅存在于JSON中的C#时,我不明白是什么使参数输入或输出受到约束。

我需要对应的JSON文件吗?如果是这样,它叫什么去了。

预先感谢

1 个答案:

答案 0 :(得分:4)

看看multiprocessing.Array。那里的第一个示例显示了如何读取blob流,只需将Queue Trigger替换为HTTP触发器即可,例如

[FunctionName("UIHandler")]
public static async Task<HttpResponseMessage> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = "{name}")] HttpRequest req,
    string name, 
    TraceWriter log, 
    [Blob("samples-workitems/{name}", FileAccess.Read)] Stream stream)
{
    log.Info($"C# HTTP trigger function processed a request for {name}.");

    return new HttpResponseMessage()
    {
        StatusCode = HttpStatusCode.OK,
        Content = new StreamContent(stream)
    };

}