如何使用Azure函数Binder查询运行时指定的表?

问题描述 投票:0回答:1

通过使用表名指定Table属性,可以直接将Azure函数绑定到表:

[FunctionName("TableInput")]
public static void Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req, 
    [Table("MyTable")] MyTable table, 
    ILogger log)
{
    ...
}

但是如果表名是参数化的,那么该函数会从表中读取在HTTP请求中传递的名称:

[FunctionName("queryById")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = "{tableName}")] HttpRequest req,
    Binder binder, 
    ILogger log,
    string tableName)

我想要做的是使用TableAttribute绑定表:

var attributes = new Attribute[]
{    
    new TableAttribute(collectionName), 
};

但它看起来不像IBinder接口支持表绑定,以便从表中读取数据。我不能将BindAsync与CloudTable类型一起使用以获取对Table的引用。我可以绑定到TableEntity,但这只是为了使用IAcyncCollector将数据插入表中。

有没有办法通过在运行时指定表名来动态地将Azure功能绑定到表?

azure azure-functions azure-table-storage
1个回答
1
投票

如果tableName是样本中所述的Http触发路径,只需使用route参数指定绑定。

[Table("{tableName}")] CloudTable table

使用IBinderBinder时我没有遇到任何错误

var table = await binder.BindAsync<CloudTable>(new TableAttribute($"{tableName}"));
© www.soinside.com 2019 - 2024. All rights reserved.