【问题标题】:Azure function HTTP trigger Blob storage output bindingAzure 函数 HTTP 触发器 Blob 存储输出绑定
【发布时间】:2022-01-14 23:48:21
【问题描述】:

我尝试使用 C# 和 .net 3.0.1 (runtime ~3) 和 Visual Studio 2019 开发 HTTP 触发 azure 函数。 在我的函数中,我想将数据写入 blob,并且我希望能够从请求正文中设置目标文件名。 我使用以下代码:

public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            [Blob("reports/{reportname}", FileAccess.Write)] TextWriter report,
            ILogger log)
        {

但是当我运行函数时,我得到了错误:

Unable to resolve binding parameter 'reportname'. Binding expressions must map to either a value provided by the trigger or a property of the value the trigger is bound to, or must be a system binding expression (e.g. sys.randguid, sys.utcnow, etc.).

我已经阅读了有关绑定的内容,但我完全不明白如何创建正确的绑定或如何将绑定添加到 function.json 文件中。

谁能帮助/解释我做错了什么?

谢谢!

【问题讨论】:

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


    【解决方案1】:

    首先,您需要为{reportname} 提供一个值,如错误消息所述。

    当您使用 [HttpTrigger] 时,您可以在 POST 请求正文中提供值:

    {
        "reportName": "test"
    }
    

    [HttpTrigger] 绑定中,您可以获取绑定以向您传递一个反序列化的对象来表示您的 POST 请求,而不是获取 HttpRequest 对象,即MyRequest

    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] MyRequest request
    

    当您发送请求时,ReportName 属性将在 [Blob] 绑定中映射到路径:reports/{reportname}。这是存储文件的 blob 存储路径。

    然后您可以使用输出 TextWriter report 参数将文本添加到您的 blob:

    report.WriteLineAsync("content");
    

    或者您也可以在 POST 正文中发送报告内容:

    public class MyRequest
    {
        public string ReportName { get; set; }
    
        public string ReportContent { get; set; }
    }
    
    report.WriteLineAsync(request.ReportContent);
    

    完整的工作示例:

    public static class HttpTriggeredFunction
    {
        [FunctionName("HttpTriggeredFunction")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = "reports")] MyRequest request,
            [Blob("reports/{reportname}", FileAccess.Write)] TextWriter report,
            ILogger log)
        {
            await report.WriteLineAsync(request.ReportContent);
    
            return new OkResult();
        }
    }
    
    public class MyRequest
    {
        public string ReportName { get; set; }
    
        public string ReportContent { get; set; }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-29
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 2019-09-14
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      相关资源
      最近更新 更多