我有一个使用IdentityModel中的TokenClient的新MVC项目
var tokenClient = new TokenClient(tokenUrl, clientId, CLIENT_SECRET, null, AuthenticationStyle.BasicAuthentication);
我在IdentityModel中安装了nuget包,并且一切正常。但是,在运行时,出现以下错误。
找不到方法:'无效
IdentityModel.Client.TokenClient..ctor(System.String,System.String,
System.String,System.Net.Http.HttpMessageHandler,
IdentityModel.Client.AuthenticationStyle)”。
MVC项目的.NET版本为4.6.1
是什么导致此问题?我一直在搜索谷歌,找不到任何有帮助的东西。我想必一定是简单的事情。
编辑:
通过显式声明参数进行初始化也不起作用。
var tokenClient = new TokenClient(tokenUrl, clientId: clientId, clientSecret: CLIENT_SECRET);// CLIENT_SECRET, null, AuthenticationStyle.BasicAuthentication);
但是用一个参数初始化它可以正常工作。
var tokenClient = new TokenClient(tokenUrl);
最佳答案
IdentityModel是由Identity Server的创建者构建的第三方库。 v3.10.1肯定确实有该方法的重载。我已经重新创建了错误,并且得到此错误的原因是因为IdentityModel v3.10.1与.NET Framework 4.6.1不兼容。创建者更改了该重载的签名,并将HttpMessageHandler设置为可选参数,以便您的代码可以编译,但会在运行时引发此Method Not Found错误。您正在引用的IdentityModel项目已由Identity Server的人员存档,因此,我建议您迁移。
正如我所见,您有两种选择:
1)迁移到.NET Core,并利用IdentityModel v2。
2)将项目降级到.NET Framework 4.5.2(IdentityModel V1的最新兼容版本)
3)不要使用此重载(因为您已经发现单个tokenUrl参数有效)。由于您可能会遇到其他兼容性问题,因此我将不采用这种方法。
基本上,如果您不想迁移到.NET Core,请将该项目保留在4.5.2上。如果可以迁移,请改为执行此操作。无论如何,Identity Server总体上都将朝着.NET Core迈进,通过立即实现这一飞跃,您将获得更多收益。
关于c# - IdentityModel中的TokenClient问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53396295/