我收到此错误:
System.Text.Json.JsonException:检测到不支持的可能的对象循环。这可能是由于循环造成的,或者是物体深度大于允许的最大深度32。
我的代码:
public string GeneratJwt(Users users, List<UserRoles> roles)
{
var secretKey = Encoding.UTF8.GetBytes("NewSecurity123456");
var signingCredentials = new SigningCredentials(new SymmetricSecurityKey(secretKey), SecurityAlgorithms.HmacSha256Signature);
var claims = _getClaims(users, roles);
var descriptor = new SecurityTokenDescriptor
{
Issuer = "MyApi",
Audience = "OnlineStorePerfume",
IssuedAt = DateTime.Now,
NotBefore = DateTime.Now,
Expires = DateTime.Now.AddDays(3),
SigningCredentials = signingCredentials,
Subject = new ClaimsIdentity(claims)
};
var tokenHandler = new JwtSecurityTokenHandler();
var secretToken = tokenHandler.CreateToken(descriptor);
var jwt = tokenHandler.WriteToken(secretToken);
return jwt;
}
private IEnumerable<Claim> _getClaims(Users users, List<UserRoles> roles)
{
var list = new List<Claim>
{
new Claim(ClaimTypes.Name, users.UserName),
new Claim(ClaimTypes.NameIdentifier, users.UserId.ToString()),
};
foreach (var item in roles)
{
list.Add(new Claim(ClaimTypes.Role, item.Role.RoleTitle));
}
return list;
}
答案 0 :(得分:0)
foreach (var item in roles)
{
list.Add(new Claim(ClaimTypes.Role, item.Role.RoleTitle));
}
在上面的代码中,您正在添加许多具有相同类型(ClaimTypes.Role)的声明,并且json序列化程序无法对其进行序列化。