将容器名称作为参数传递给 BlobTrigger

wot*_*324 4 azure azure-storage azure-functions

我有一个小的 C# 应用程序,当一个新的 blob 被添加到存储帐户中的容器时,它会做一些事情。

我正在使用 Visual Studio 2017 在本地工作。

VS 模板给了我:

using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;

namespace LogicAppTriggerFunction
{
    public static class BlobTrigger
    {
        [FunctionName("BlobTrigger")]
        public static void Run([BlobTrigger("samples-workitems/{name}", Connection = "")]Stream myBlob, string name, ILogger log)
        {
            log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图"samples-workitems"用一个与我的容器名称相关的变量来替换。我只想使用一个容器,但我不想对其进行“硬编码”。

如果我在正确的行上,则此设置存储在function.json编译时构建的内容中。在本地工作时,我认为 / 认为 的内容function.json是由 读取的local.settings.json,但是我现在认为这是针对 appSettings.json。

阅读 MS doco,尤其是在trigger bindings 上,看起来myContainer/{name}应该从 function.json 中读取。我知道 function.json 是动态构建的,不应修改。

我尝试了各种我知道的基本上替换 string 的方法myContainer/{name},但它们都会导致错误:

[20/08/2018 14:56:36] Run: Microsoft.Azure.WebJobs.Host: Error indexing method 'TriggerLogicApp.Run'. Microsoft.Azure.WebJobs.Host: Invalid blob trigger path '{container}/{name}'. Container paths cannot contain {resolve} tokens.
Run Code Online (Sandbox Code Playgroud)

我相信我需要做的是以编程方式“创建”(或更新)中的pathfunction.json,但我不知道如何做到这一点。

任何人都可以阐明我需要做什么以及可能如何做?

Jer*_*Liu 8

local.settings.json本地或 Azure 上的应用程序设置中指定容器名称。

{
    "IsEncrypted": false,
    "Values": {
        ....
        "MyBlobContainer":"samples-workitems"
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的函数签名中,使用包裹在百分号中的App 设置绑定表达式

public static void Run([BlobTrigger("%MyBlobContainer%/{name}", Connection = "")]Stream myBlob, string name, ILogger log)
Run Code Online (Sandbox Code Playgroud)