属性“TableAttribute”是一个WebJobs属性,在.NETWorker、IsolatedProcess中不受支持
c#
我正在将一些功能从 netcore 3.1 迁移到 net5,以使用隔离模型。但是,我遇到了这种我尚未解决的不兼容问题;文档并没有让我找到解决方案。这是关于使用 Azure 函数在存储表中放置一行,此代码片段完美运行:
// netcoreapp3.1, works OK
[FunctionName("PlaceOrder")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "post")]
OrderPlacement orderPlacement,
[Table("Orders")] IAsyncCollector<Order> orders)
{
await orders.AddAsync(new Order {
PartitionKey = "US",
RowKey = Guid.NewGuid().ToString(),
CustomerName = orderPlacement.CustomerName,
Product = orderPlacement.Product
});
return new OkResult();
}
在 net5 中执行此操作的尝试与以下内容非常相似:
// net5.0 approach
[Function("PlaceOrder")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "post")]
HttpRequestData req,
[Table("Orders")] IAsyncCollector<Order> orders)
{
var orderPlacement = await req.ReadFromJsonAsync<OrderPlacement>();
await orders.AddAsync(new Order {
PartitionKey = "US",
RowKey = Guid.NewGuid().ToString(),
CustomerName = orderPlacement.CustomerName,
Product = orderPlacement.Product
});
return new OkResult();
}
但是表绑定行指示错误:属性 'TableAttribute' is a WebJobs attribute and not supported in the .NET Worker (Isolated Process)。- 什么是正确的等价物?
回答
您应该使用Microsoft.Azure.Functions.Worker.Extensions.*Azure 功能包 .net 5。
您可以阅读此官方文档以获取更多信息。
因此对于表绑定使用Microsoft.Azure.Functions.Worker.Extensions.Storage包并使用TableOutput属性进行绑定。
如下图所示:
[Function("TableFunction")]
[TableOutput("OutputTable", Connection = "AzureWebJobsStorage")]
public static MyTableData Run([QueueTrigger("table-items")] string input,
[TableInput("MyTable", "MyPartition", "{queueTrigger}")] MyTableData tableInput,
FunctionContext context)
{
var logger = context.GetLogger("TableFunction");
logger.LogInformation($"PK={tableInput.PartitionKey}, RK={tableInput.RowKey}, Text={tableInput.Text}");
return new MyTableData()
{
PartitionKey = "queue",
RowKey = Guid.NewGuid().ToString(),
Text = $"Output record with rowkey {input} created at {DateTime.Now}"
};
}
您可以在此处查看各种受支持绑定的示例。
THE END
二维码