我正在制作一个具有登录/注销语义的Windows Phone 7应用程序(对Web应用程序进行身份验证)。当用户注销时,我会导航回登录屏幕并忘记会话身份验证。
执行此操作时,我还要清除导航历史记录,以便无法返回到期望已经过身份验证的页面。
无法看到如何使用NavigationService
进行操作,并且想知道是否有办法执行此操作。
答案 0 :(得分:6)
这里有几点需要注意。首先,我建议您熟悉此处提供的指导。
Introducing the concept of “Places” - Peter Torr's Blog
Redirecting an initial navigation - Peter Torr's Blog(此刻抱歉)
如果您能够在本指南中工作,那是最佳途径。处理登录屏幕有具体的建议。
如果您被迫提供主页按钮功能。小心你如何应用它,因为认证者正在敲回应用程序,以便在导航方面采取意想不到的行为。我觉得如果这个功能在主页按钮后面你应该在惊喜部门可以。随着时间的推移,我们将看到这一点。可以说“注销”场景同样适用。
以下是Richard Woo,Maarten Struys,Sam Jarawan的三种方法。
答案 1 :(得分:3)
此代码运行良好(它需要在您的页面中),尚未尝试通过认证但代码确实有效:
while (true)
{
if (this.RemoveBackEntry() == null)
{
break;
}
}
这似乎与documentation不同,logged a bug表示如果没有更多项目会引发异常,因此我对此用户语音{{3}},因此将来可能会发生变化。
答案 2 :(得分:0)
我担心您无法清除堆栈页面,更重要的是,您的应用程序将无法通过认证。 More info
答案 3 :(得分:0)
清除后台堆栈的一种简单方法是执行以下操作
while (NavigationService.CanGoBack)
{
NavigationService.RemoveBackEntry();
}
请注意,如果你在onloaded事件中执行此操作,它将在每次导航到页面时触发,再次单击返回将关闭应用程序!
重要提示,如果您使用网络控件或NAX广告系统,则该密钥将由网页和网络控件使用,因此应用程序将存在而不是返回页面。
**更新 还从MS开发中心找到了更短的手版本
while (NavigationService.RemoveBackEntry() != null);
一条简单的路线。尼斯
答案 4 :(得分:0)
您应该为您的网页创建“已加载”事件
private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
{
try { while (NavigationService.RemoveBackEntry() != null) ; }
catch (System.NullReferenceException ex) { }
}