在查看了有关保存 JWT 令牌的选项后,我选择了 Xamarin.Essentials 安全存储。
问题是我的应用程序在尝试将令牌保存在存储中时总是中断并出现以下错误:
“已抛出 System.AggregateException”
详情如下:
“Xamarin.Essentials.NotImplementedInReferenceAssemblyException
此程序集的可移植版本中未实现此功能。您应该从您的主应用程序项目中引用 NuGet 包,以便引用特定于平台的实现。”
这显然意味着安装 nuget 包时出了点问题,所以我:
- 卸载并重新安装 xamarin.essentials 包。
- 将 .Netstandard 升级到 2.0,认为 1.6 不兼容。
- 检查是否在 csproj 文件中引用了包。
以此类推,什么都没有。
现在,我有一个带有以下代码行的 TokenStorageController:
public bool SaveToken(string token)
{
if(token != null)
{
Preferences.Set(key, token);
if(Preferences.ContainsKey(key))
{
return true;
}
}
return false;
}
从中调用控制器的 RestService 类如下所示:
//await SecureStorage.SetAsync("oauth_token", "booommmmmm"); // changed to this simply to check if my controller was the problem
TokenStorageController tokenStorage = new TokenStorageController();
await tokenStorage.SaveToken("boommmmm"); // where I get an error
这是发生错误的确切行:
var loginTask = Task.Run(() => restService.LoginAsync(user)).Result;
如果没有解决方案,我将删除所有软件包并重新安装它们。逐个!我发誓我会做到的!如果根本没有解决方案,我会将令牌存储在 SQL 中,因为我已经有一个控制器来执行此操作。
我是 Xamarin 和 C# 菜鸟,所以请多多包涵。
仅供参考:我使用 macOS 客户端进行测试,原因可能是 SecureStorage 不适用于 macOS 应用程序。
谢谢!