2010-07-16 4 views
0

J'ai cette vérification d'authentification dans mon fichier Global.asax dans le Session_OnStart() appel:L'appel de la session avant toute action du contrôleur est exécuté dans MVC

if (Session["Authenticated"] == null) 
     { 
      Response.Redirect("~/Login.aspx"); 
     } 

Ce type d'authentification de session est étroitement associée dans toutes nos applications web donc je dois l'utiliser de cette façon. Ce global.asax se trouve dans un projet Webforms plus ancien, dans lequel mon projet MVC est assis. Donc, je crois qu'il me permet d'accéder à mon action de contrôleur directement sans que mon authentification de session soit remplie, c'est-à-dire qu'elle ne soit pas redirigée. J'ai ajouté ce morceau de code à chaque action du contrôleur pour contourner cela, mais est-il possible de le définir quelque part globalement (pas dans le global.asax) de sorte que je n'ai qu'à l'appeler une fois pour toutes les actions du contrôleur? Merci.

Répondre

6

Vous devez créer un basecontroller dont tous vos contrôleurs héritent. alors vous avez simplement la logique dans un endroit. i.e .:

public abstract class BaseController : ControllerBase 

Vous pouvez ensuite utiliser la méthode initialize dans le nouveau BaseContoller pour effectuer la logique commune. c'est-à-dire

[edit] - changé en OnActionExecuting, plutôt que Initialiser. Ce n'est pas le plus élégant des endroits pour le faire car nous sommes à la limite de la vue appelée. Cependant, c'est un point de départ.

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    // you should be able to get session stuff here!! 
    base.OnActionExecuting(filterContext); 
} 

et dans chaque contrôleur:

public class AnotherNormalController : BaseController 
+0

Le problème est la session est nulle à ce moment-là :(son seul quand mon action du contrôleur est appelé, je crois pouvoir accéder à des objets de session, mais ? niveau du contrôleur, est toujours nulle – David

+0

David, voir mise à jour ci-dessus utilisent OnActionExcecuting, plutôt que Initialiser –

+0

merci je vais essayer .. – David

Questions connexes