2008-11-30 9 views
0

J'ai du code que je mets dans le code-behind d'une page maître. Cette page maître est ma mise en page principale et le but du code est de vérifier si l'utilisateur est connecté et de prendre les mesures appropriées selon qu'il le soit ou non. Je serais intéressé d'entendre d'autres méthodes sur la façon d'aborder cela, mais je le fais de cette façon pour l'instant car c'est un port direct d'un autre framework MVC, et je veux modifier le moins de code possible pendant le port. Ma vraie question est: comment puis-je déterminer le nom du contrôleur, de l'action et de la vue en cours d'exécution? Une partie de la logique dans le code-behind dépend de connaître le nom de la page en cours. Pour être précis, il est dit (pseudocode):Comment puis-je connaître le nom du contrôleur/de l'action/de la vue en cours?

if (!isLoggedIn && !isLoginPage) 
    Redirect(loginPage); 

Alors, je dois savoir si je suis sur la page de connexion déjà pour éviter une boucle de redirection infinie. Je suis en train d'y parvenir en examinant l'Url pour voir si elle contient la chaîne/Login /, mais c'est hacky et je préfère utiliser une méthode plus robuste et intelligente.

+0

Si vous suivez ce que Rob Conery vous a suggéré de ne pas avoir à gérer, cela arrivera automatiquement. –

Répondre

2

Jetez un oeil à l'attribut Autorisation pour les actions des contrôleurs et contrôleurs. Cela devrait vous éviter de faire quoi que ce soit dans le code derrière la page maître.

+0

Merci, je vais examiner cela, mais ma question principale est de savoir comment controller/action/view sont en cours d'exécution? – RedFilter

+0

Si vous êtes dans le chemin du code du contrôleur, this.RouteData.Values ​​vous donnera le nom du contrôleur, le nom de l'action et d'autres paramètres. Une fois que vous êtes dans la vue mais le contrôleur a été éliminé, il n'y a donc aucun moyen de savoir. – MrJavaGuy

+0

Vous pouvez également remplacer la méthode OnResultExecuted sur le contrôleur obtenir tous les trois. – MrJavaGuy

4

La meilleure vérification pour savoir si un utilisateur est connecté (en supposant que vous utilisez FormsAuth) est User.Identity.IsAuthenticated qui est accessible depuis Views ou Controller.

Cela me semble que vous devez brancher Form auth ici - il gère tout pour vous, y compris les redirections. Dans votre web.config, assurez-vous que ceci est ajouté:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login"/> 
</authentication> 

Ceci indique à votre application que vous utilisez l'authentification par formulaire. , Utilisez un ActionFilter sur les méthodes que vous souhaitez à côté de verrouiller:

/// <summary> 
/// Default view 
/// </summary> 
/// <returns></returns> 
[Authorize(Roles="Administrator")] 
public ActionResult Index() 
{ 
    return View(); 
} 

Cela fonctionne avec les formes auth pour vous assurer identifié de l'utilisateur. Il ajoutera automatiquement l'URL actuelle en tant que redirection et ignorera la vue de connexion - tout est automatique et fait pour vous.

1

Notez qu'il existe un certain nombre de façons de transmettre des données aux pages maîtres décrites here.

Questions connexes