Я создаю приложение с серебряным светом, используя шаблон приложения для навигации. Он предназначен для внутреннего использования и, следовательно, использует windows authenticatoin. На странице панели мониторинга отображается пара записей, отфильтрованных при регистрации в идентификаторе пользователей. Чтобы получить идентификатор пользователя (который является int), я вызываю веб-службу, переопределяя GetAuthenticatedUser и передавая имя пользователя (из IPrincipal). Эта услуга занимает некоторое время, чтобы вернуть данные.Служба Silverlight Navigation and Authentication
Когда я перехожу к приложению панели инструментов, он полностью отображается без данных, потому что служба пользователя является асинхронной операцией, и я не могу сделать рендеринг до тех пор, пока мой GetAuthenticatedUser не завершится полностью. Таким образом, я создал страницу входа, в которой отображается только индикатор выполнения, пока я не получу объект пользователя, а затем перейдите на панель управления. Если кто-то пытается получить доступ к панели управления напрямую с помощью URL-адреса, я хочу, чтобы они вернулись к странице входа.
Так в конструкторе панели мониторинга я добавил следующий код
if (!UserService.Current.User.IsAuthenticated)
{
MessageBox.Show("Navigating away");
Frame objContainer = this.Parent as Frame;
objContainer.Navigate(new Uri("/Views/Login.xaml", UriKind.Relative));
}
Thogh Я получаю строку окна сообщения, это на самом деле не взять меня на страницу входа в систему, но остается на приборной панели страницы. Я также попытался поместить этот код в OnNavigatedTo переопределить без везения.
Я также попытался использовать NavigationService вместо рамы, как показано ниже, не повезло
if (!UserService.Current.User.IsAuthenticated)
{
MessageBox.Show("Navigating away");
this.NavigationService.Navigate(new Uri("/Views/Login.xaml", UriKind.Relative));
}
он все еще не работает. Кто-нибудь знает, как сделать доступную страницу доступной только в том случае, если у меня есть полностью действующий объект пользователя? если они попытаются получить доступ к закрытой странице без этого, я хочу, чтобы они могли перенаправляться на страницу входа, как это можно достичь?
Я использую Silverlight 3 Beta
Shreedhar