У меня есть Claim от JwtSecurityToken, которые выглядят так:
{
"profile":{
"roles":{
"Rolename":{
"Type":27
}
}
}
}
Мне нужно получить значение Type (сейчас 27)
Rolename это название роли - она может быть разной (и может быть более одной роли)
Задача для меня - назвать роль и получить значение Type.
Как я это делаю:
JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
JwtSecurityToken tokenS = handler.ReadToken(token) as JwtSecurityToken;
string profile = tokenS.Claims.First(claim => claim.Type == "profile").Value;
JObject o = JObject.Parse(profile);
string cardType = o.SelectToken("$.roles." + "Rolename" + ".Type").ToString();
Работает хорошо, но я не знаю, как взять ролевое имя и как быть, когда у меня будет больше одной роли





Роли во множественном числе должны быть массивом. Затем вы можете получить все значения в этом массиве так, как хотите, с помощью цикла. Пример:
var roleTypes = new List<string>();
foreach (var role in profile.roles)
{
//populate a list
}
Роли во множественном числе должны быть массивом - пожалуйста, покажите пример
@Igor Массивы JSON (и для полноты: Объекты JSON)
@john Тип в роли зависит от роли и должен быть в роли - пожалуйста, покажите, как это может выглядеть
Вы имеете в виду, когда у вас есть что-то вроде этого: {"profile": {"roles": [{"Rolename1": {"Type": 27}}, {"Rolename2": {"Type": 28}}]} }
@Phael Я думаю, он имел в виду {"profile":{"roles":{"Rolename":{"Type":27},"Rolename2":{"Type":1923892}}}} .... или нет. Кто знает? Вопрос непонятный.
Если всегда есть одна роль, вы можете сделать это:
JObject o = JObject.Parse(profile);
var role = ((JObject)o["roles"]).Properties().First();
string roleName = role.Name;
int cardType = (int)role.Value["Type"];
если может быть несколько ролей, вы можете просмотреть массив JProperty следующим образом:
var roles = ((JObject)o["roles"]).Properties();
foreach (var role in roles)
{
string roleName = role.Name;
int cardType = (int)role.Value["Type"];
}
Это хороший ответ, но я не могу изменить структуру токена, мне нужно работать с тем, что есть
Я также обновил ваш ответ. Потому что profile = {"roles":{"Rolename":{"Type":27}}}. Внутри профиля нет структуры ["profile"]. А во время выполнения было NullReferenceException. Я только удалил ["profile"] и теперь все работает нормально. большое спасибо
На вашем месте я бы сделал "роли" массивом.