通过使用表名指定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功能绑定到表?
如果tableName
是样本中所述的Http触发路径,只需使用route参数指定绑定。
[Table("{tableName}")] CloudTable table
使用IBinder
或Binder
时我没有遇到任何错误
var table = await binder.BindAsync<CloudTable>(new TableAttribute($"{tableName}"));