Je crée une application Silverlight à l'aide du modèle d'application de navigation. Il est à usage interne et utilise donc windows authenticatoin. Il y a une page de tableau de bord qui montre quelques enregistrements filtrés par les utilisateurs connectés. Pour obtenir l'ID de l'utilisateur (qui est un int), j'appelle un service Web en remplaçant GetAuthenticatedUser et en passant le nom d'utilisateur (à partir de IPrincipal). Ce service prend un certain temps pour retourner les détails. Quand je navigue vers l'application de tableau de bord, il rend complètement sans données car le service de l'utilisateur est une opération asynchrone et je ne suis pas en mesure de faire attendre le rendu de mon GetAuthenticatedUser complètement. J'ai donc créé une page de connexion qui affiche juste une barre de progression jusqu'à ce que j'obtienne l'objet utilisateur, puis navigue vers le tableau de bord. Si quelqu'un tente d'accéder directement au tableau de bord en utilisant l'URL, je souhaite qu'il revienne à la page de connexion.Service de navigation et d'authentification Silverlight
donc dans le constructeur de tableau de bord, j'ajouté le code suivant
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 Je reçois l'invite de boîte de message, il ne me prend pas en fait la page de connexion, mais reste dans la page du tableau de bord. J'ai également essayé de mettre ce code dans OnNavigatedPour surcharger sans aucune chance.
J'ai aussi essayé d'utiliser NavigationService au lieu de cadre comme ci-dessous, sans chance
if (!UserService.Current.User.IsAuthenticated)
{
MessageBox.Show("Navigating away");
this.NavigationService.Navigate(new Uri("/Views/Login.xaml", UriKind.Relative));
}
ne fonctionne toujours pas. Est-ce que quelqu'un sait comment rendre une page accessible uniquement si j'ai un objet utilisateur entièrement valide? s'ils essaient d'accéder à la page restreinte sans cela, je veux qu'ils soient redirigés vers la page de connexion, comment cela peut-il être réalisé?
J'utilise Silverlight 3 Beta
Shreedhar