(Я не полностью понял вопрос или, может быть, я его совсем не понял.)
Я никогда не использовал Claims или ASP. NET core. Однако, если вторым параметром в вашем конструкторе является UserId, который вы хотите получить, как в
var claims = new List<Claim>
{
new Claim(JwtRegisteredClaimNames.Sub, /* -----> */ user.UserName /*<------ this one here */ ) ,
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
new Claim("Testing", /* -----> */"test"/* <----- Or this */)
};
, вы можете легко сделать это с помощью
claims[0 /* Or whichever you want to get*/].Value;
Полный код
var activityLog = new AccessLogEntity
{
ActivityDate = DateTime.UtcNow,
UserId = claims[i /*Or whatever*/].Value;
};
await _context.tbl_ActivityLogs.AddAsync(activityLog);
await _context.SaveChangesAsync();
Изменить:
Если вы не хотите жестко кодировать индекс, а вместо этого хотите получить имя пользователя из идентификатора имени, используйте что-то вроде этого:
public string getUsernameFromID(List<Claim> claims, string id)
{
foreach (var cl in claims)
{
if (cl.Type == id)
{
return cl.Value;
}
}
return "";
}
Используйте это как:
getUsernameFromID(claims, "Testing"); // Which returns "test"
который в этом случае вернет "test", и это действительно так!
Я что-то упустил ??? Я почти уверен, что не понял твой вопрос ...