2016-06-23 2 views
0

세션이 만료 된 경우 Application_PreRequestHandlerExecute를 사용하여 로그인으로 리디렉션하는 응용 프로그램을 상속 받았습니다.Application_PreRequestHandlerExecute를 재정의합니다.

현재 리디렉션을 호출해서는 안되는 하드 코딩 된 URL 목록이 있습니다. 본질적으로, 이들은 json을 반환하는 아약스 메소드이므로 자바 스크립트에서 개별적으로 처리됩니다.

기본값 (Application_PreRequestHandlerExecute)이 동일하게 유지되지만 적절한 동작 (즉, 하드 코드 된 URL 목록에 해당하는 동작)에서 ActionFilters가 대체 동작을 제어 할 수 있도록 메커니즘을 변경하고 싶습니다.

Application_PreRequestHandlerExecute에서 특정 ActionFilter가 있는지 어떻게 확인합니까?

EDIT : 아마도 Global Action Filter로 Application_PreRequestHandlerExecute를 대체해야합니까?

답변

0

간단히 대답하면 글로벌 작업 필터로 대체하는 것입니다.

내에서 filterContext에는 내가 필요한 모든 것이 있습니다.

편집 :

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); 

    } 
} 
: 이것은 내가가 무슨 일이 있었는지의 요지입니다
관련 문제