6

我有一个带有 PCL 程序集、Android 应用程序和 iOS 应用程序的 Xamarin.Forms 解决方案,我想在 PCL 中解码 JWT。

我不能使用Thinktecture.IdentityModel.Core 1.1.0System.IdentityModel.Tokens.Jwt 4.0.0JWT 1.3.2,因为它们都不能添加到以“ portable-net45+win+MonoAndroid10+ ”为目标的项目中单触10 '。

我能够从 NuGet 添加Jose JWT 1.7.0并验证它是否可以在单元测试中工作,但这会导致我在我的 Xamarin Android 项目中收到以下构建错误...

加载程序集时出现异常:System.IO.FileNotFoundException:无法加载程序集“System.Web.Extensions,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”。也许它在 Mono for Android 配置文件中不存在?

建议?

4

2 回答 2

7

http://developer.xamarin.com/guides/android/under_the_hood/assemblies/可以看出,Mono for Android 中的 .NET 框架似乎不包含程序集 System.Web.Extensions

编辑:这意味着您正在引用一个为桌面使用而创建的库,并且尚未使用 Android 引用程序集重新编译。这是不支持的。

于 2014-08-22T08:20:24.193 回答
0

我使用了一个名为 Portable.JWT 的库

https://www.nuget.org/packages/Portable.JWT/

您需要在共享 PCL 项目中执行此操作,而不是在 Xamarin.Android

你可以这样做:

public static class JwtDecoder
{
  public static long TokenExpirationTime(string token)
  {
    var decodedToken = JWT.JsonWebToken.DecodeToObject<Dictionary<string, object>>(token, default(byte[]), false);
    var exp = decodedToken["exp"];
    return (long)exp;
  }
}
于 2019-10-03T19:07:13.673 回答