我将
ClaimsPrincipal
存储在 FunctionContext.IInvocationFeatures
列表(在 auth 中间件内)中,并希望将 userId
(键:ClaimTypes.NameIdentifier
)作为 cosmosDb 查询的参数。我可以使用以下伪代码在函数内完成此操作:
var allFeatures = ((HttpRequestData)req).FunctionContext.Features;
var claimsPrincipalHolderFeature = allFeatures.First(..);
var id = claimsPrincipalHolderFeature.Claims.First(c =>
c.Type.Equals(ClaimTypes.NameIdentifier, StringComparison.OrdinalIgnoreCase)
).Value;
// steps with CosmosClient
但我想通过
CosmosDbInput
属性来做到这一点,例如:
public async Task<HttpResponseData> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = "area")] HttpRequestData req,
[CosmosDBInput(
databaseName: "%CosmosDb%",
containerName: "%CosmosContainer%",
Connection = "CosmosDBConnection",
SqlQuery = $"SELECT TOP 1 * FROM area a WHERE a.objectId = {{ClaimsPrincipal.Claims[{ClaimTypes.NameIdentifier}]}}")] List<Model> areas)
不幸的是这个模板
{ClaimsPrincipal.Claims[{ClaimTypes.NameIdentifier}]}
不起作用,有人有什么建议吗?如果不可能并且我需要实现自定义绑定,那么最好重用一些已经存在的代码(CosmosDBInputAttribute 和相关代码),而不是从头开始创建任何内容,例如描述的here
绑定可以使用来自其他绑定的表达式,例如,您可以使用
HttpTrigger
中的某些内容到 CosmosDBInput
中,但从环境来看,我没有看到任何文档说明这是可能的。
值可以从以下位置绑定:
参考:https://learn.microsoft.com/azure/azure-functions/functions-bindings-expressions-patterns