JWT:如何从声明中的特定键获取值列表。 C# Asp.Net 核心
Posted
技术标签:
【中文标题】JWT:如何从声明中的特定键获取值列表。 C# Asp.Net 核心【英文标题】:JWT: How to get a List of Values from a specific Key in the Claims. C# Asp.Net Core 【发布时间】:2021-04-18 17:29:01 【问题描述】:我正在使用这段代码从 JWT 中的声明中读取单个值。
return httpContext.User.Claims.Single(x => x.Type == "id").Value;
获取此声明的价值:
"id": "b6dddcaa-dba6-49cf-ae2d-7e3a5d060553"
但是,我想读取具有多个值的键。 但使用相同的代码:
return httpContext.User.Claims.Single(x => x.Type == "groups").Value;
对于此声明:
"groups": [
"123",
"234"
],
我从逻辑上得到以下错误消息:
System.InvalidOperationException: "Sequence contains more than one matching element"
找不到对应的方法。有人可以帮我吗?
【问题讨论】:
【参考方案1】:因为Single()
,用Where()
代替Single()
return httpContext.User.Claims
.Where(x => x.Type == "groups") //Filter based on condition
.Select(y => y.Value); // get only Value
Single()
:它返回一个序列的单个特定元素。 如果找到多个满足条件的元素会抛出错误
【讨论】:
【参考方案2】:参考ClaimsPrincipal.FindAll(Predicate<Claim>)
检索与指定谓词匹配的所有声明。
IEnumerable<Claim> claims = httpContext.User.FindAll(x => x.Type == "groups");
IEnumerable<string> values = claims.Select(c => c.Value);
return values;
【讨论】:
以上是关于JWT:如何从声明中的特定键获取值列表。 C# Asp.Net 核心的主要内容,如果未能解决你的问题,请参考以下文章
C# - 字典 - 如何在字典中获取特定类值的最大值? [复制]
如何在 C# 中的键和值列表上使用 Lambda 函数获取最大值和最小值?
如何从 ASP.NET C# 中的 SqlDataSource 获取特定的行值?