我确信这个问题的答案无处不在,但我很难找到它,也许我没有正确地写出来?
我有一个显示的项目列表:
我想做的事情是:
var phoneNo = res("phone_number").Value;
但实际的语法是什么?
编辑: 这是我试图取得成功的事情:
答案 0 :(得分:1)
看起来您正试图从索赔中获取价值。你可以这样做:
var userClaims = context.HttpContext.User as ClaimsPrincipal;
让您声明价值:
if (userClaims.Claims.Where(x => x.Type == "phone_number").FirstOrDefault() != null)
{
var phoneNumberClaim = User.Claims.Where(x => x.Type == "phone_number").FirstOrDefault().Value;
}
答案 1 :(得分:0)
这种任务的编程有一种特殊的结构。它被称为字典。
我认为您的ToClaims
方法应返回Dictionary,因此您可以通过所需的任何键访问值。您也可以使用.ToDictionary(...)
投射列表,您可以在其中按":"
分割字符串以获取键和值。
答案 2 :(得分:0)
根据给出的反馈,我想展示我从中获得的两种最佳方法。
我采用的方法:
//set up a dictionary
var claims = ctx.User.ToClaims().ToDictionary(claim => claim.Type, claim => claim.Value);
//access as follows
var phoneNo = claims["phone_number"];
var firstName = claims["given_name"];
//etc.
另一个好方法:
//set up IEnumerable
var claims = ctx.User.ToClaims();
//access as follows
var phoneNos = claims.FirstOrDefault(c => c.Type == "phone_number")?.Value;
var firstName = claims.FirstOrDefault(c => c.Type == "given_name")?.Value;
//etc.