2016-06-23 2 views
0

私は、セッションが終了したときにApplication_PreRequestHandlerExecuteを使用してログインにリダイレクトするアプリケーションを継承しました。Application_PreRequestHandlerExecuteを無効にします。

現在、リダイレクトを呼び出すべきではないハードコードされたURLのリストがあります。基本的に、これらはjsonを返すajaxメソッドなので、javascriptで別々に扱われます。

デフォルト(Application_PreRequestHandlerExecute内)は同じままですが、適切なアクション(つまり、ハードコードされたURLリストに対応するアクション)でActionFiltersによって代替動作を制御できるように、メカニズムを変更したいと考えています。

Application_PreRequestHandlerExecuteで特定のActionFilterの存在を確認するにはどうすればよいですか?

EDIT:おそらく、私はApplication_PreRequestHandlerExecuteをグローバルアクションフィルタで置き換える必要がありますか?

答えて

0

簡単な答えは、グローバルアクションフィルターで置き換えることです。

そのうち、filterContextには必要なものすべてが含まれています。

EDIT:これは私がのために行ったものの要旨です:

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

    } 
} 
関連する問題