OnActionExecuting Causing Infinite Redirect pour gérer le délai d’expiration de la session

J’essaie d’utiliser OnActionExecuting dans BaseController pour gérer la redirection vers l’écran de connexion si la session utilisateur a expiré. Cependant, cela provoque des redirections infinies avant même que je ne me connecte. Quelqu’un peut-il nous dire comment résoudre ce problème?

Donc, dans mon contrôleur de base, j’ai les éléments suivants:

protected override void OnActionExecuting(ActionExecutingContext filterContext) { if (SessionManager.Instance().GetUser() == null) { filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "Controller", "Home" }, { "Action", "LogOn" } }); } base.OnActionExecuting(filterContext); } 

Donc, fondamentalement, j’ai une classe Session Manager qui peut obtenir / définir un utilisateur, etc. – Je connais en quelque sorte le problème en ce que GetUser sera également nul car il est uniquement défini à l’aide de ma méthode SetUser après validation de LogOn.

Mais plutôt que d’avoir toutes les méthodes de mes autres contrôleurs ayant un contrôle comme:

 public ActionResult SomeOtherMethod() { if(SessionManager.Instance().GetUser() != null) { //Go Do Useful View stuff } else { //Redirect To Logon } } 

Je veux utiliser OnActionExcuting dans le contrôleur de base. Mais comme il fonctionne sur les pages LogOn (comme il se doit), je suis redierct infiniment car GetUser sera toujours null?

Y a-t-il une meilleure façon de faire cela

Peut-être que vous pouvez essayer quelque chose comme ça:

 protected override void OnActionExecuting(ActionExecutingContext filterContext) { ssortingng controllerName = filterContext.Controller.GetType().Name; ssortingng actionName = filterContext.ActionDescriptor.ActionName; if (SessionManager.Instance().GetUser() == null ) { if(!controllerName.Equals(typeof(HomeController).Name,SsortingngComparison.InvariantCultureIgnoreCase) || !actionName .Equals("LogOn",SsortingngComparison.InvariantCultureIgnoreCase))) filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "Controller", "Home" }, { "Action", "LogOn" } }); } base.OnActionExecuting(filterContext); }