You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从.NET5升级到.NET6后Blazor Server的JWT带双引号验证失败如何解决

问题解决说明

根因

升级到.NET6后,你项目依赖的Blazored.LocalStorage库也同步升级到适配.NET6的高版本,该版本对存储API的行为做了变更:

  • .NET5对应的低版本SetItemAsync传入字符串类型时会直接存储原始值
  • .NET6对应的高版本SetItemAsync会对所有传入参数默认执行JSON序列化,字符串类型序列化后会被额外包裹双引号
    你读取时使用GetItemAsStringAsync会把双引号作为字符串内容一起读出,最终传给服务端的Token格式错误,导致JWT验证失效。

解决方案

方案1(推荐):使用字符串专属存储API

存储字符串类型的Token时使用SetItemAsStringAsync,该API不会对输入做JSON序列化,直接存储原始字符串,仅需要修改存储Token的代码即可,读取逻辑无需改动:

// 把原来的SetItemAsync替换为SetItemAsStringAsync
await _locStorage.SetItemAsStringAsync("AuthToken", token);

方案2:读取Token后移除多余双引号

如果不想修改存储逻辑,可以在读取后对Token做裁剪处理,移除前后包裹的双引号:

var token = await _locStorage.GetItemAsStringAsync("AuthToken");
// 移除首尾双引号
token = token.Trim('"');

方案3:用泛型API反序列化读取

因为存储时是JSON序列化的结果,用泛型GetItemAsync<string>读取时会自动执行JSON反序列化,自动去掉多余双引号:

// 替换GetItemAsStringAsync为泛型读取
var token = await _locStorage.GetItemAsync<string>("AuthToken");

内容的提问来源于stack exchange,提问作者Smith Waliko Msiska

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:24:03