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

调用JwtSecurityToken.WriteToken抛出类型初始值设定项异常求助

解决思路
  • 统一NuGet包版本
    解决方案内3个项目可能存在包版本不一致的情况,尤其是Microsoft.IdentityModel.Tokens和Newtonsoft.Json。打开NuGet包管理器的“管理解决方案的NuGet程序包”界面,确保所有项目(即使未直接使用Token功能的项目)的这两个包版本完全一致;对于不相关的项目,可直接卸载这两个包,避免跨项目的程序集冲突。

  • 检查并修复程序集绑定重定向
    查看使用Token功能项目的app.config或web.config,确认是否存在针对Newtonsoft.Json和Microsoft.IdentityModel.Tokens的绑定重定向配置,确保重定向到当前使用的包版本。示例配置:

    <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" />
    </dependentAssembly>
    <dependentAssembly>
        <assemblyIdentity name="Microsoft.IdentityModel.Tokens" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.32.0.0" newVersion="6.32.0.0" />
    </dependentAssembly>
    

    若没有配置,可右键项目→属性→应用程序,勾选“自动生成绑定重定向”,让Visual Studio自动生成正确的重定向规则。

  • 清理缓存并彻底重建项目

    1. 删除所有项目下的bin、obj文件夹,清除编译残留文件;
    2. 打开NuGet包管理器设置,清除所有NuGet缓存;
    3. 重新生成整个解决方案,避免旧程序集干扰。
  • 排查JwtPayload的序列化问题
    异常触发于JwtPayload.SerializeToJson(),大概率是Payload中包含无法正常序列化的内容(比如循环引用、未标记可序列化的自定义类型)。可在生成Token前,手动序列化Payload内容测试:

    // 在handler.WriteToken(token)前添加测试代码
    var testJson = Newtonsoft.Json.JsonConvert.SerializeObject(token.Payload);
    

    若此代码抛出异常,可定位到具体的问题字段,调整Payload内容后再尝试生成Token。

  • 确认目标框架兼容性
    检查使用Token功能项目的目标框架版本,确保与Microsoft.IdentityModel.Tokens包的支持范围匹配。例如部分新版本的包不再支持.NET Framework 4.5及以下版本,需调整项目框架或更换兼容版本的包。

内容的提问来源于stack exchange,提问作者Sonnich Jensen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:10:05