我有一个带有计时器触发器的Azure函数,然后我想生成一个具有动态(在运行时中定义)名称和内容的文件并将其保存到例如一个驱动器。

我的功能代码:

public static void Run(TimerInfo myTimer, out string filename, out string content)
{
    filename = $"{DateTime.Now}.txt";
    content = $"Generated at {DateTime.Now} by Azure Functions";
}


function.json

{
  "bindings": [
    {
      "name": "myTimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 */5 * * * *"
    },
    {
      "type": "apiHubFile",
      "name": "content",
      "path": "{filename}",
      "connection": "onedrive_ONEDRIVE",
      "direction": "out"
    }
  ],
  "disabled": false
}


但是,这失败了

Error indexing method 'Functions.TimerTriggerCSharp1'. Microsoft.Azure.WebJobs.Host:
Cannot bind parameter 'filename' to type String&. Make sure the parameter Type
is supported by the binding. If you're using binding extensions
(e.g. ServiceBus, Timers, etc.) make sure you've called the registration method
for the extension(s) in your startup code (e.g. config.UseServiceBus(),
config.UseTimers(), etc.).

最佳答案

您可以按照以下方法进行操作:

#r "Microsoft.Azure.WebJobs.Extensions.ApiHub"

using System;
using System.IO;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host.Bindings.Runtime;

public static async Task Run(TimerInfo myTimer, TraceWriter log, Binder binder)
{
    log.Info($"C# Timer trigger function executed at: {DateTime.Now}");

    var fileName = "mypath/" + DateTime.Now.ToString("yyyy-MM-ddThh-mm-ss") + ".txt";

    var attributes = new Attribute[]
    {
        new ApiHubFileAttribute("onedrive_ONEDRIVE", fileName, FileAccess.Write)
    };


    var writer = await binder.BindAsync<TextWriter>(attributes);
    var content = $"Generated at {DateTime.Now} by Azure Functions";

    writer.Write(content);
}


function.json文件:

    {
  "bindings": [
    {
      "name": "myTimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "10 * * * * *"
    },
    {
      "type": "apiHubFile",
      "name": "outputFile",
      "connection": "onedrive_ONEDRIVE",
      "direction": "out"
    }
  ],
  "disabled": false
}


您实际上不需要在apiHubFile中使用function.json声明,但是由于我发现了一个错误,今天它仍然应该存在。我们将修复该错误。

关于c# - ApiHubFile Azure Function绑定(bind)的动态输出文件名(一个驱动器,存放箱等),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43348985/

10-09 05:33
查看更多