Как использовать функции Azure Binder для запроса таблицы, указанной во время выполнения? - PullRequest
0 голосов
/ 14 февраля 2019

Связать функцию Azure с таблицей просто, указав атрибут Table с именем таблицы:

[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, чтобы получить ссылку на таблицу.Я могу привязать к TableEntity, но это работает только с целью вставки данных в таблицу с помощью IAcyncCollector.

Есть ли способ динамически привязать функцию Azure к таблице, указав имя таблицы во время выполнения?

1 Ответ

0 голосов
/ 14 февраля 2019

Если tableName - это маршрут триггера Http, как сказано в вашем примере, просто используйте параметр route, чтобы указать привязку.

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

И я не встретил никакой ошибки при использовании IBinder или Binder

var table = await binder.BindAsync<CloudTable>(new TableAttribute($"{tableName}"));
...