我正在尝试在我的基于Orchard CMS的网站上启动web-api模块。为了安全起见,web-api必须使用JWT。
我制作了这样一个模块。在我的开发环境中离线构建和编译时,一切都很成功。我能够查询API并获得一些结果。以下是API在我的开发环境Postman Response Screenshot
中返回JWT的证明这很好,很花哨。但是,当我尝试将模块上传到我现有的网站(在Orchard CMS上构建)时,我收到一个错误:
<directory>/JwtManager.cs(4): error CS0234: The type or namespace name 'Jwt' does not exist in the namespace 'System.IdentityModel.Tokens' (are you missing an assembly reference?)
引用程序集肯定包含在我正在创建的nuget包中(在bin
目录中可见)。我在StackOverflow上看到了关于使用5.0.0.0+ JWT的汇编版本的其他问题,例如here - 但是没有一个问题出现同样的错误。另外,我已经确认我的代码正在使用构建中的正确对象,例如。 SigningCredentials和SymmetricSecurityKey,所以我不相信这些答案与我的具体情况有关。
我对使用参考装配解决这些问题并不太熟悉,所以如果这是一个简单的解决方案,我道歉。这是我尝试过的:
System.IdentityModel.Tokens.Jwt
&#34;特定版本&#34;在构建nuget包之前,我的项目中的true
属性。同样的错误仍然存在。bindingRedirect
程序集的旧版本上使用System.IdentityModel.Tokens.Jwt
。同样的错误仍然存在(该二进制文件的旧版本正在解决方案中的另一个项目中使用)。using System.IdentityModel.Tokens.Jwt;
语句,并强烈定义依赖此using语句的任何对象。有趣的是,在这样做的过程中,我没有收到例如声明中的错误。 System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler();
- 但我在HttpActionResult实现中的must declare a body because it is not marked abstract or extern.
行收到错误public string ReasonPhrase { get; }
。上面的第3点让我相信ASP.Net版本可能存在一些问题导致所有这些奇怪(因为上面只是一个简单的属性......),但我真的不确定。我确保目标框架在我的开发和在线环境(.NET Framework 4.5.2)上都是相同的。
对我来说,这一切都没有意义,因为在我的开发环境中一切都运行得很好,开发环境建立在与我的在线环境相同的OrchardCMS版本上。
我在项目中使用的参考组件:
System.IdentityModel.Tokens.Jwt
- v5.1.5.0 Microsoft.IdentityModel.Tokens
- v5.1.5.0 对此事的任何帮助都非常感激 - 这个小问题阻碍了我的进步,我似乎没有做任何事情来解决这个问题!!
其他信息: 我应该澄清一下我们的生产&#34;此问题中提到的环境不维护我们的源代码版本。然而,我创建了一个独立的测试环境,它反映了我们的生产环境,并在那里安装了源代码。
请务必注意,通过Orchard CMS管理仪表板安装NuGet包是加载代码的机制。此问题中所有先前对在线环境的引用都是指尝试加载此代码的过程。
当我实际将包作为项目添加到我们的解决方案时,问题不会发生,我们的web-api实现可以在我们的测试环境中运行。
但是,这不是解决方案,因为我们不会也不会在我们的生产环境中维护解决方案源的版本。但是,它可以为更知识渊博的人提供一些关于发生了什么的线索?
答案 0 :(得分:0)
根据Orchard's Module Loader documentation - 我们的在线环境仍然启用了动态编译。我们的引用库存在一个问题导致无法编译服务器端..我相信VS以某种方式屏蔽了该问题,并允许编译仍然在离线状态下进行,因为我们的解决方案确实包含正确的引用。