我想做一件非常简单的事情:如果某人转到了我的Web视图中的特定页面,我希望将他们重定向到另一个页面。我想这样做是为了防止在会话超时时显示错误页面。因此,这需要在Xamarin中进行,因为我必须重新发送用户凭据。
为此,我相信我必须赶上导航事件,检查网页是否与我不想看到的页面相对应。取消导航事件,然后将浏览器URL设置为我要重定向到的页面。
private void Navigating(object sender, WebNavigatingEventArgs e)
{
String url = e.Url;
if (url.Contains("unauthenticated.xhtml"))
{
url = getURL();
e.Cancel = true;
browser.Source = url;
} else
{
e.Cancel = false;
}
LogService.log("navigating to " + url);
}
这不起作用。我仍然可以看到难看的unauthenticated.xhtml页面,并且没有重定向。如果我进行调试,则可以正确运行代码,因此我知道该事件总是可以很好地捕获,并且可以检查网站。如果我在浏览器中找到了新的网址,则会显示正确的页面。
现在,如果我删除此行
e.Cancel = true;
我更接近想要的结果。然后,我确实被重定向到unauthenticated.xhtml,但是在一秒钟内,我再次被重定向到正确的页面。因此,警告在屏幕上闪烁并消失。 (可以理解:两个导航事件仍会发生)
我也尝试过按以下顺序放置这两行:
browser.Source = url;
e.Cancel = true;
但是结果没有改变。
如何从程序内部获得良好的重定向? 谢谢您的帮助。