Azure 函数 HTTP 触发器 Blob 存储输出绑定
Azure function HTTP trigger Blob storage output binding
我尝试使用 C# 和 .net 3.0.1(运行time ~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 文件中。
有人可以吗help/explain我做错了什么?
谢谢!
首先,您需要按照错误消息所述为 {reportname}
提供一个值。
当您使用 [HttpTrigger]
时,您可以在 POST 请求正文中提供值:
{
"reportName": "test"
}
在 [HttpTrigger]
绑定中,不是获取 HttpRequest
对象,而是获取绑定以向您传递一个反序列化对象来表示您的 POST 请求,即 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; }
}
我尝试使用 C# 和 .net 3.0.1(运行time ~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 文件中。
有人可以吗help/explain我做错了什么?
谢谢!
首先,您需要按照错误消息所述为 {reportname}
提供一个值。
当您使用 [HttpTrigger]
时,您可以在 POST 请求正文中提供值:
{
"reportName": "test"
}
在 [HttpTrigger]
绑定中,不是获取 HttpRequest
对象,而是获取绑定以向您传递一个反序列化对象来表示您的 POST 请求,即 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; }
}