我正在尝试获取按 desc 订购的客户的每种类型笔记之一的列表。在 SQL Server 中,我编写了以下查询
SELECT
note_id, st_id, note_type, signature_date
FROM
(SELECT
note_id, st_id, note_type, signature_date
ROW_NUMBER() OVER (PARTITION BY note_type ORDER BY signature_dateDESC) AS row_num
FROM
notes_log
WHERE
cl_id = 1
AND svce_type = 'service type 1'
AND (note_type = 'note type 1' OR note_type = 'note type 2' OR note_type = 'note type 3')
) AS subquery
WHERE row_num = 1
ORDER BY signature_date DESC;
Run Code Online (Sandbox Code Playgroud)
这个查询工作正常,但是当将上面的查询转换为 Linq 时,我遇到了一些错误。这就是我所做的
var lastNotes = await dbContext.Set<NotesLog>()
.Where(s => s.ClientId == …Run Code Online (Sandbox Code Playgroud) 我刚刚将 ASP.NET Core 6 Web API 升级到 .NET 8(请注意,在 .NET 6 中一切都工作得很好),并且在创建 JWT 令牌时收到此错误:
System.ArgumentOutOfRangeException:'IDX10720:无法为算法'HS256'创建KeyedHashAlgorithm,密钥大小必须大于:'256'位,密钥具有'152'位。(参数'keyBytes')'
根据我对此错误的理解,似乎对秘密需要多长时间有一个新的要求,因此我使秘密更长,这适用于创建令牌,但在读取令牌时我收到一个全新的错误
System.ArgumentException:“IDX12723:无法解码有效负载”[“System.String”类型的 PII 已隐藏。有关更多详细信息,请参阅 https://aka.ms/IdentityModel/PII。]' 作为 Base64Url 编码字符串。
编辑:这是内部异常,也许这可以说明一些问题
JsonException:IDX11020:类型为“String”的 JSON 值无法转换为“JsonTokenType.Number”。读取:“System.IdentityModel.Tokens.Jwt.JwtPayload.iat”,位置:“52”,当前深度:“1”,消耗的字节数:“75”。
这里是否有一些处理 JWT 令牌的重大更改?
这是读取令牌的私有方法的代码
private User? _GetIdentity(HttpContext context, string token)
{
try
{
var handler = new JwtSecurityTokenHandler();
//var jsonToken = handler.ReadToken(token);
var tokenS = handler.ReadToken(token) as JwtSecurityToken;//error happens here
var user = new User
{
Id = tokenS.Claims.First(claim => claim.Type == ClaimTypes.NameIdentifier).Value,
UserName = tokenS.Claims.First(claim => claim.Type == ClaimTypes.Name).Value,
Email = tokenS.Claims.First(claim …Run Code Online (Sandbox Code Playgroud)