2016-06-23 18 views
0

Ich habe eine Anwendung geerbt, die Application_PreRequestHandlerExecute verwendet, um zur Anmeldung umzureichen, wenn die Sitzung abgelaufen ist.Overriding Application_PreRequestHandlerExecute

Momentan gibt es eine Liste von hartcodierten URLs, die keine Weiterleitung aufrufen sollten. Im Wesentlichen sind dies Ajax-Methoden, die json zurückgeben, so dass sie separat in Javascript behandelt werden.

Ich möchte den Mechanismus so ändern, dass der Standardwert (in Application_PreRequestHandlerExecute) gleich bleibt, aber das alternative Verhalten von ActionFilters für die entsprechenden Aktionen (d. H. Die der hartcodierten Liste von URLs) gesteuert werden kann.

Wie überprüfe ich das Vorhandensein des bestimmten ActionFilter in Application_PreRequestHandlerExecute?

EDIT: Vielleicht muss ich Application_PreRequestHandlerExecute mit einem globalen Aktionsfilter ersetzen?

Antwort

0

Die kurze Antwort soll durch einen globalen Aktionsfilter ersetzt werden.

Innerhalb dieser filterContext hat alles, was ich brauche.

EDIT: Das ist der Kern dessen, was ich ging:

public enum SessionExpiredBehaviour 
{ 
    Redirect, 
    Ignore, 
    JSON 
} 


[AttributeUsage(AttributeTargets.Method)] 
public class SessionExpiredFilterAttribute : ActionFilterAttribute 
{ 
    public SessionExpiredBehaviour Behaviour { get; set; } = SessionExpiredBehaviour.Redirect; 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 

     if (HttpContext.Current.Session["User"] == null) 
     { 
      switch (this.Behaviour) 
      { 

       case SessionExpiredBehaviour.Redirect: 
        filterContext.Result = 
         new RedirectToRouteResult(new RouteValueDictionary 
         { 
          { "action", "RedirectToLogin" }, 
          { "controller", "Account" } 
         }); 
        break; 

       case SessionExpiredBehaviour.JSON: 
        //TODO 
        break; 
      } 

     } 
     base.OnActionExecuting(filterContext); 

    } 
}