如何使用Azure Functions Binder查询运行时指定的Table?
How to use Azure functions Binder to query Table specified at runtime?
通过使用 table 名称指定 Table 属性,将 Azure 函数绑定到 table 很简单:
[FunctionName("TableInput")]
public static void Run(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
[Table("MyTable")] MyTable table,
ILogger log)
{
...
}
但是如果 table 名称是参数化的,即函数从 table 读取在 HTTP 请求中传递的名称:
[FunctionName("queryById")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = "{tableName}")] HttpRequest req,
Binder binder,
ILogger log,
string tableName)
我想做的是使用 TableAttribute:
绑定 table
var attributes = new Attribute[]
{
new TableAttribute(collectionName),
};
但看起来 IBinder 接口不支持 table 绑定以从 table 读取数据。我无法将 BindAsync 与 CloudTable 类型一起使用以获得对 Table 的引用。我可以绑定到 Table 实体,但这仅适用于使用 IAcyncCollector 将数据插入 table 的目的。
有没有办法通过在运行时指定 table 名称将 Azure 函数动态绑定到 table?
如果tableName
是您示例中所说的Http触发器的路由,只需使用路由参数指定绑定即可。
[Table("{tableName}")] CloudTable table
而且我在使用 IBinder
或 Binder
时没有遇到任何错误
var table = await binder.BindAsync<CloudTable>(new TableAttribute($"{tableName}"));
通过使用 table 名称指定 Table 属性,将 Azure 函数绑定到 table 很简单:
[FunctionName("TableInput")]
public static void Run(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
[Table("MyTable")] MyTable table,
ILogger log)
{
...
}
但是如果 table 名称是参数化的,即函数从 table 读取在 HTTP 请求中传递的名称:
[FunctionName("queryById")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = "{tableName}")] HttpRequest req,
Binder binder,
ILogger log,
string tableName)
我想做的是使用 TableAttribute:
绑定 tablevar attributes = new Attribute[]
{
new TableAttribute(collectionName),
};
但看起来 IBinder 接口不支持 table 绑定以从 table 读取数据。我无法将 BindAsync 与 CloudTable 类型一起使用以获得对 Table 的引用。我可以绑定到 Table 实体,但这仅适用于使用 IAcyncCollector 将数据插入 table 的目的。
有没有办法通过在运行时指定 table 名称将 Azure 函数动态绑定到 table?
如果tableName
是您示例中所说的Http触发器的路由,只需使用路由参数指定绑定即可。
[Table("{tableName}")] CloudTable table
而且我在使用 IBinder
或 Binder
var table = await binder.BindAsync<CloudTable>(new TableAttribute($"{tableName}"));