你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

适用于 .NET 的 Azure WebJobs 表客户端库 - 版本 1.2.0

此扩展提供用于访问 Azure Functions 中的 Azure 表的功能。

入门

安装包

使用 NuGet 安装表扩展:

dotnet add package Microsoft.Azure.WebJobs.Extensions.Tables

先决条件

需要 Azure 订阅存储帐户Cosmos 表帐户 才能使用此包。

使用存储表

若要创建新的存储帐户,可以使用 Azure 门户Azure PowerShellAzure CLI。 下面是使用 Azure CLI 的示例:

az storage account create --name <your-resource-name> --resource-group <your-resource-group-name> --location westus --sku Standard_LRS

使用 Cosmos 表

若要创建新的 Cosmos 表,可以使用 Azure 门户Azure PowerShellAzure CLI

验证客户端

连接表示连接到表服务所需的一组信息。 它可以包含连接字符串、终结点、令牌凭据或共享密钥。

ConnectionTableAttribute 属性定义用于表服务访问的连接。 例如, [Tables(Connection="MyTableService")] 将使用 MyTableService 连接。

可以在 Azure 门户 中local.settings.json应用程序设置中设置连接信息。

将设置添加到 local.settings.json 时,将其放在 属性下 Values

{
  "IsEncrypted": false,
  "Values": {
    "MyTableService": "..."
  }
}

将设置添加到 Azure 门户中的应用程序设置时,请直接使用提供的名称:

MyTableService = ...

默认情况下, AzureWebJobsStorage 表扩展使用连接名称。

连接字符串

若要使用连接字符串身份验证,请将连接字符串值直接分配给连接设置。

<ConnectionName> = DefaultEndpointsProtocol=https;AccountName=...;AccountKey=...;EndpointSuffix=core.windows.net

使用终结点和令牌凭据

注意: 仅存储表支持令牌凭据身份验证。

<ConnectionName>__endpoint = https://...table.core.windows.net

如果未提供凭据信息, DefaultAzureCredential 则使用 。

使用用户分配的托管标识时, clientId 需要提供 和 credential 设置:

<ConnectionName>__credential = managedidentity

<ConnectionName>__clientId = <user-assigned client id>

使用共享密钥凭据

使用共享密钥身份验证时,endpointaccountKey需要提供 和 accountName

<ConnectionName>__endpoint = https://...table.core.windows.net

<ConnectionName>__credential__accountName = <account name>

<ConnectionName>__credential__accountKey = <account key>

关键概念

输入绑定允许读取表作为 Azure 函数的输入。 输出绑定允许修改和删除 Azure 函数中的表行。

请按照 输入绑定教程输出绑定教程 了解如何使用此扩展访问表服务。

示例

表扩展仅提供绑定。 绑定本身无法触发函数。 它只能读取或写入表的条目。

在以下示例中,我们使用 HTTP 触发器 调用 函数。

绑定到单个实体

public class InputSingle
{
    [FunctionName("InputSingle")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET")] HttpRequest request,
        [Table("MyTable", "<PartitionKey>", "<RowKey>")] TableEntity entity, ILogger log)
    {
        log.LogInformation($"PK={entity.PartitionKey}, RK={entity.RowKey}, Text={entity["Text"]}");
    }
}

使用模型类型绑定到单个实体

public class MyEntity
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Text { get; set; }
}
public class InputSingleModel
{
    [FunctionName("InputSingleModel")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET")] HttpRequest request,
        [Table("MyTable", "<PartitionKey>", "<RowKey>")] MyEntity entity, ILogger log)
    {
        log.LogInformation($"PK={entity.PartitionKey}, RK={entity.RowKey}, Text={entity.Text}");
    }
}

使用筛选器绑定到多个实体

public class InputMultipleEntitiesFilter
{
    [FunctionName("InputMultipleEntitiesFilter")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET")] HttpRequest request,
        [Table("MyTable", "<PartitionKey>", Filter = "Text ne ''")] IEnumerable<TableEntity> entities, ILogger log)
    {
        foreach (var entity in entities)
        {
            log.LogInformation($"PK={entity.PartitionKey}, RK={entity.RowKey}, Text={entity["Text"]}");
        }
    }
}

创建单个实体

public class OutputSingle
{
    [FunctionName("OutputSingle")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET")] HttpRequest request,
        [Table("MyTable")] out TableEntity entity)
    {
        entity = new TableEntity("<PartitionKey>", "<RowKey>")
        {
            ["Text"] = "Hello"
        };
    }
}

使用模型创建单个实体

public class MyEntity
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Text { get; set; }
}
public class OutputSingleModel
{
    [FunctionName("OutputSingleModel")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET")] HttpRequest request,
        [Table("MyTable")] out MyEntity entity)
    {
        entity = new MyEntity()
        {
            PartitionKey = "<PartitionKey>",
            RowKey = "<RowKey>",
            Text = "Hello"
        };
    }
}

创建多个实体

public class OutputMultiple
{
    [FunctionName("OutputMultiple")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "POST")] HttpRequest request,
        [Table("MyTable")] IAsyncCollector<TableEntity> collector)
    {
        for (int i = 0; i < 10; i++)
        {
            collector.AddAsync(new TableEntity("<PartitionKey>", i.ToString())
            {
                ["Text"] = i.ToString()
            });
        }
    }
}

使用模型创建多个实体

public class MyEntity
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Text { get; set; }
}
public class OutputMultipleModel
{
    [FunctionName("OutputMultipleModel")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "POST")] HttpRequest request,
        [Table("MyTable")] IAsyncCollector<MyEntity> collector)
    {
        for (int i = 0; i < 10; i++)
        {
            collector.AddAsync(new MyEntity()
            {
                PartitionKey = "<PartitionKey>",
                RowKey = i.ToString(),
                Text = i.ToString()
            });
        }
    }
}

绑定到 SDK TableClient 类型

使用 TableClient 方法参数通过 Azure 表 SDK 访问表。

public class BindTableClient
{
    [FunctionName("BindTableClient")]
    public static async Task Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "POST")] HttpRequest request,
        [Table("MyTable")] TableClient client)
    {
        await client.AddEntityAsync(new TableEntity("<PartitionKey>", "<RowKey>")
        {
            ["Text"] = request.GetEncodedPathAndQuery()
        });
    }
}

故障排除

有关故障排除指南,请参阅监视Azure Functions

后续步骤

阅读 Azure 函数简介创建 Azure 函数指南

供稿

有关构建、测试和参与此库的详细信息,请参阅 CONTRIBUTING.md

本项目欢迎贡献和建议。 大多数贡献要求你同意贡献者许可协议 (CLA),并声明你有权(并且确实有权)授予我们使用你的贡献的权利。 有关详细信息,请访问 cla.microsoft.com

此项目采用了 Microsoft 开放源代码行为准则。 有关详细信息,请参阅行为准则常见问题解答,或如果有任何其他问题或意见,请与 联系。

曝光数