Azure functions Azure函数BlobTrigger属性绑定问题

Azure functions Azure函数BlobTrigger属性绑定问题,azure-functions,azure-blob-trigger,Azure Functions,Azure Blob Trigger,我正在尝试创建一个Azure函数,它使用BlobTrigger操作一些文件,然后将它们保存回blob 为此,我希望能够访问BlobProperties对象来检查文件的内容类型,以确保操作例程支持该文件 根据我的理解,我应该能够简单地在名为Properties的方法上添加一个参数,该方法属于BlobProperties类型,并且我可以确认这对列出的其他元数据类型有效 但是,每当我添加属性时,我的应用程序都无法工作,并报告以下错误: “Function1”函数出错:Microsoft.Azure.W

我正在尝试创建一个Azure函数,它使用BlobTrigger操作一些文件,然后将它们保存回blob

为此,我希望能够访问BlobProperties对象来检查文件的内容类型,以确保操作例程支持该文件

根据我的理解,我应该能够简单地在名为Properties的方法上添加一个参数,该方法属于BlobProperties类型,并且我可以确认这对列出的其他元数据类型有效

但是,每当我添加属性时,我的应用程序都无法工作,并报告以下错误:

“Function1”函数出错:Microsoft.Azure.WebJobs.Host:错误索引方法“Function1”。Microsoft.Azure.WebJobs.Host:无法将参数“属性”绑定到类型“Microsoft.WindowsAzure.Storage.Blob.BlobProperties”

我做错了什么?以下是我的方法:

public static void Run([BlobTrigger("TestContainer/{name}", Connection = "AzureWebJobsStorage")] Stream inputFile,
        string name, string BlobTrigger, IDictionary<string, string> Metadata, ILogger log, BlobProperties Properties)
publicstaticvoid运行([BlobTrigger(“TestContainer/{name}”,Connection=“azurewebjobstorage”)]流输入文件,
字符串名称、字符串BlobTrigger、IDictionary元数据、ILogger日志、BlobProperties属性)
我的目标框架是.NETCore3.1,Azure功能版本是v3。 我有以下NuGet软件包:

  • Microsoft.Azure.WebJobs.Extensions.Storage 4.0.3
  • Microsoft.NET.Sdk.3.0.11功能
我看到一篇类似的帖子,其中建议删除对Extensions.Storage组件的引用,但这样做会删除[BlobTrigger]属性和其他类型,因此不起作用。相关问题似乎可以追溯到2018年,适用于较旧版本的Azure Function,当然这应该能解决问题

感谢您的建议,提前谢谢您。

只需执行以下操作:

using System;
using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
using Microsoft.WindowsAzure.Storage.Blob;

namespace FunctionApp48
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static void Run([BlobTrigger("test/{name}", Connection = "str")]CloudBlockBlob myBlob, string name, ILogger log)
        {
            string a = myBlob.Properties.ContentType;
            log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Properties.Length} Bytes"+"\n"+a);
        }
    }
}
我可以成功获取blob的内容类型:

参考资料包:

<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="3.0.10" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.11" />

只需执行以下操作:

using System;
using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
using Microsoft.WindowsAzure.Storage.Blob;

namespace FunctionApp48
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static void Run([BlobTrigger("test/{name}", Connection = "str")]CloudBlockBlob myBlob, string name, ILogger log)
        {
            string a = myBlob.Properties.ContentType;
            log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Properties.Length} Bytes"+"\n"+a);
        }
    }
}
我可以成功获取blob的内容类型:

参考资料包:

<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="3.0.10" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.11" />


azure函数的参数类型是有限的。为什么不将blob视为blockblob之类的对象,而将其视为流?我认为像blockblob这样的类不应该引起序列化问题(我以前似乎做过类似的事情)。传入blob对象并操作它应该是可行的,您可以试一试。@BowmanZhu对不起,我不确定我是否理解您的意思,您能提供一个示例吗?您是否建议将inputFile更改为CloudBlockBlob类型?我已经发布了答案,您可以查看并尝试一下。azure函数的参数类型是有限的。为什么不将blob视为blockblob之类的对象,而将其视为流?我认为像blockblob这样的类不应该引起序列化问题(我以前似乎做过类似的事情)。传入blob对象并操作它应该是可行的,您可以试一试。@BowmanZhu对不起,我不确定我是否理解您的意思,您能提供一个示例吗?你是否建议将inputFile更改为CloudBlockBlob类型?我已经发布了答案,你可以看一看并尝试一下。是的,这在3.0.10版中可以正常工作,但在4.0.3版中失败。谢谢你的帮助,我想现在我会坚持使用流,使用IDictionary元数据绑定来检查“hdi_isfolder”,我也可以使用{name}.{extension}来过滤掉文件夹:)3.0.10版也有一个“字典中不存在日志类型”的问题但这在3.0.11中得到了解决,并按预期运行。谢谢。是的,这在3.0.10版中运行良好,但在4.0.3版中失败。谢谢你的帮助,我想现在我会坚持使用流,使用IDictionary元数据绑定来检查“hdi_isfolder”,我也可以使用{name}.{extension}来过滤掉文件夹:)3.0.10版也有一个“字典中不存在日志类型”的问题但这在3.0.11中得到了解决,并按预期运行。非常感谢。