Claim
объекты - это нечто большее, чем просто строка, и то, что вы видите в userClaimsList
, представляет собой список этих объектов претензий.
Претензии в основном являются парами типа претензии и значения претензии , и когда вы ищете определенную информацию о пользователе, вы должны использовать тип претензии для идентификации свойства пользователя. Вы ищете.
То, что вы делаете в своем коде, предполагает, что иск, который вы ищете, является третьим по счету, что само по себе уже является опасным допущением, поскольку вы не можете быть уверены, что это будет всегда . : заявки, как правило, считаются неупорядоченными, и вы должны искать их по типу. И как только вы получаете тип, вы затем .ToString()
it, что существенно уменьшает всю информацию, имеющуюся у типа Claim
, до одной строки формата claimType: claimValue
. Вы можете использовать это, но это действительно неэффективно, когда сам объект является гораздо лучшим способом доступа к значению претензии.
Поскольку вы ищете префикс "preferred_username: "
, я предполагаю, что preferred_username
- это тип заявки , который вы ищете. В этом случае вы можете посмотреть это утверждение так:
var claim = HttpContext.User.Claims.First(c => c.Type == "preferred_username");
var emailAddress = claim.Value;
Использование First
вызовет исключение, если иск с таким типом не был найден. Если вы этого не хотите, вы можете использовать FirstOrDefault
, а затем проверить, является ли claim
null
.
Существует также несколько вспомогательных расширений, которые позволяют напрямую извлекать претензии. В этом случае вы можете использовать FindFirstValue
для пользователя, чтобы получить сумму претензии напрямую:
var emailAddress = HttpContext.User.FindFirstValue("preferred_username");
В случае, если претензия с таким типом не была найдена, FindFirstValue
вернет null
, поэтому emailAddress
может быть null
в этом случае.