你当前正在访问 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 PowerShell或 Azure 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 PowerShell或 Azure CLI。
验证客户端
连接表示连接到表服务所需的一组信息。 它可以包含连接字符串、终结点、令牌凭据或共享密钥。
Connection
的 TableAttribute
属性定义用于表服务访问的连接。 例如, [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>
使用共享密钥凭据
使用共享密钥身份验证时,endpoint
accountKey
需要提供 和 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 开放源代码行为准则。 有关详细信息,请参阅行为准则常见问题解答,或如果有任何其他问题或意见,请与 联系。