一.项目需求:
1.调用外部接口链接,需要使用JWT获取token。
(本次案例使用JWT10.0,底层调用了Newtonsoft.Json13.0的方法)
二.项目难点:
1.金蝶云星空自带的Newtonsoft.Json 4.0版本过低,不能支持JWT所需的Newtonsoft.Json 13.0方法。
三.解决方案:
解释:替换金蝶自带的Newtonsoft.Json是不可能的,金蝶云星空底层的框架是调用了Newtonsoft.Json的方法的,直接替换会导致整个系统无法运行
1.思路:
a.反编译JWT 10.0,Newtonsoft.Json 13.0。
b. 在低版本Newtonsoft.Json的基础上,重写高版本Newtonsoft.Json的方法。
(本次案例是在Newtonsoft.Json4.0的基础上,实现Newtonsoft.Json13.0的部分方法,从而实现JWT获取token)
c.步骤就是visual studio哪里报错,在反编译工具中找到报错的属性或方法,添加到自定义类中
2.使用工具:Visual Studio(开发工具),ILSpy(反编译工具)
3.操作步骤:
a.新增自定义类JsonNetSerializer
b.新增自定义静态类ExpandMethod,里面写支持JsonNetSerializer的属性,方法
c.在Visual Studio 中报错的方法或者属性,在ILSpy工具中找到并粘贴到自定义方法中
d.调试运行,方案通过
4.代码如下:
在Newtonsoft.Json 13.0的条件下,调用JWT获取token。
代码块1:
//返货Token信息
public static string JWTEncode(string ucode)
{
var secretKey = AppSettingService.SecretKey;//获取jwt密钥,示例是存放到配置文件
if (!String.IsNullOrEmpty(secretKey))
{
var dic = new Dictionary<string, object>();
dic["systemName"] = ucode;//增加用户名到字典
var expiredTimeSpan = 1;
if (!String.IsNullOrEmpty(AppSettingService.ExpiredTimeSpan))
{
var timeSpan = AppSettingServ