我的应用程序逻辑的简短介绍:我的应用程序正在使用 REST-Api,并且需要一个令牌来处理除特定请求之外的所有请求(我们称之为“配对页面”)。在我导航到我的任何页面之前,我正在检查目标位置。如果我的目标是我请求令牌的页面,则不会检查现有令牌。对于每个其他页面,都需要一个令牌。如果不存在令牌,则用户应导航回“配对页面”。我的起始页是我的配对页。
有什么问题?:
启动应用程序(配对页面)并获取令牌并导航到第二页时 - 我们称之为“概述” - 一切正常。概述有一个按钮,该按钮调用一个删除我的令牌并导航回配对页面的方法。这也有效。
现在有趣的部分:当我再次尝试配对并导航到概览时(第二次),没有完成导航。我的意思是我的概述没有弹出。
我正在使用 Xamarin 的 Shell Navigation 并覆盖 OnNavigating-Method。
代码:
protected override void OnNavigating(ShellNavigatingEventArgs args)
{
// check if BearerToken exist. If so, navigate to Overview
if (args.Target.Location.ToString() != "//Admission.Event.Pair"
&& args.Target.Location.ToString() != "Admission.Event.Pair")
{
App app = App.Current as App;
string bearerToken = RestServiceCalls.GetBearerToken(app._dependencyService);
// if a the token is missing call the Pairing-Page
if (string.IsNullOrEmpty(bearerToken)
|| string.IsNullOrWhiteSpace(bearerToken))
{
Device.BeginInvokeOnMainThread(async () => { await NavigateToPageAsync("Admission.Event.Pair"); });
return;
}
}
base.OnNavigating(args);
}
async Task NavigateToPageAsync(object pageName, bool animate = true)
{
await Xamarin.Forms.Shell.Current.GoToAsync($"{pageName.ToString()}", animate);
Xamarin.Forms.Shell.Current.FlyoutIsPresented = false;
}
让我们看一下args:
应用启动,pairing-page:
args.Target.Location: //Admission.Event.Pair
args.Current.Location: null
正在弹出Pairing-Page,一切正常。
单击处理获取令牌的按钮,然后导航到概览:
args.Target.Location: Admission.Event
args.Current.Location: //Admission.Event.Pair
概览页面弹出,一切正常。也得到了一个有效的令牌。
单击处理删除令牌并导航到配对页面的按钮:
args.Target.Location: Admission.Event.Pair
args.Current.Location: //Admission.Event.Pair/Admission.Event
令牌被正确删除(为空)并弹出配对页面。一切都好。
现在问题出现了:
当我现在尝试获取令牌并再次导航到概览时,我的 args 具有此内容并且我的概览不会显示:
args.Target.Location: Admission.Event
args.Current.Location: // Admission.Event.Pair/Admission.Event/Admission.Event.Pair
有什么想法吗?
我的第一个想法是这可能是目标位置的问题。