使用 Azure 和 Xamarin 通过 webview 进行身份验证时如何调试 "the given key was not present in the dictionary"

How to debug "the given key was not present in the dictionary" when authenticating through webview with Azure and Xamarin

我正在尝试让服务器管理的身份验证与 Visual Studio Mobile Center 一起使用。它使用 Azure 应用服务身份验证。我能够设置我的 Facebook 开发者帐户以允许登录,然后在 Mobile Center 上对其进行配置,当我转到移动中心 link 在网络浏览器中进行身份验证时,效果很好。

我将身份验证的客户端设置为与 Adrian Hall 在其书中的示例相同: https://adrianhall.github.io/develop-mobile-apps-with-csharp-and-azure/chapter2/social/#adding-authentication-to-a-mobile-client

当 webview 弹出 facebook 时,它让我输入凭据,但当我点击提交按钮时崩溃了。这是来自应用程序输出的堆栈跟踪 window:

System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
[AndroidRuntime]   at System.ThrowHelper.ThrowKeyNotFoundException () [0x00000] in <8c304e4006094a46a7950338a3b3cb5d>:0 
[AndroidRuntime]   at System.Collections.Generic.Dictionary`2[TKey,TValue].get_Item (TKey key) [0x00021] in <8c304e4006094a46a7950338a3b3cb5d>:0 
[AndroidRuntime]   at Microsoft.WindowsAzure.MobileServices.MobileServiceUIAuthentication+<>c__DisplayClass2_0.<LoginAsyncOverride>b__1 (System.Object sender, Xamarin.Auth._MobileServices.AuthenticatorCompletedEventArgs e) [0x00030] in <fe9883f628724025a38f5e1946e5b4c5>:0 
[AndroidRuntime]   at (wrapper delegate-invoke) System.EventHandler`1[Xamarin.Auth._MobileServices.AuthenticatorCompletedEventArgs]:invoke_void_object_TEventArgs (object,Xamarin.Auth._MobileServices.AuthenticatorCompletedEventArgs)
[AndroidRuntime]   at Xamarin.Auth._MobileServices.Authenticator+<>c__DisplayClass22_0.<OnSucceeded>b__0 () [0x00021] in <fe9883f628724025a38f5e1946e5b4c5>:0 
[AndroidRuntime]   at Java.Lang.Thread+RunnableImplementor.Run () [0x0000b] in <a4e9508b230b49a18f145a67e12eb7b8>:0 
[AndroidRuntime]   at Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00009] in <a4e9508b230b49a18f145a67e12eb7b8>:0 
[AndroidRuntime]   at (wrapper dynamic-method) System.Object:23f66101-d05c-44cc-a8fe-d50bbc9e59d1 (intptr,intptr)

在最新的 Xamarin Studio 和 Visual Studio 2017 上测试,使用 Xamarin.Forms 2.3.3、最新的 Xamarin.Auth 和最新的 Azure MobileServicesClient。

关于如何调试这个有什么建议吗?我中断了检查的所有异常,并收到未处理的异常,消息为 "The given key was not present in the dictionary.",没有内部异常或堆栈跟踪,然后它崩溃了。

编辑:复制:https://github.com/brandonrisell/TapFriends

  1. 打开 Azure 门户
  2. 找到您的 Mobile Center 后端的资源组
  3. 打开移动应用程序资源
  4. Select 认证/授权
  5. 检查令牌存储是否已打开。

如果不是,打开它,保存然后重新启动并重新检查。

我认为这就是问题所在。如果没有,请在这里回复我,我们会尝试其他方法。