public class AuthenticationFilter : FilterAttribute 
    {
        //
        // GET: /AuthenticationFilter/        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            //如果当前用户没有登录,则取消以后的操作,重新指定一个ActionResult
            if (!filterContext .HttpContext .User .Identity.IsAuthenticated  )
            {
               filterContext.
                filterContext.Result = new RedirectToRouteResult("Default", new  RouteValueDictionary (new { action = "Login" }));
            }
        }    }
按理说filterContext应该有Cancel属性,为什么调不出来呢,我的是ASP.NET MVC 2

解决方案 »

  1.   

    我想你遇到的和我一样。用户ID。或SessionID为空的时候,跳转到登陆页或指定的页是一个一回事。
    这个下面包含的内容多了。
    1、直接重载当前的控制器就可以。整个站点需要,当然可以创建一个Base控制器。protected override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                var timestamp = filterContext.HttpContext.Timestamp;
                var timeout = filterContext.HttpContext.Session.Timeout;            var userSessionID = Session["UserSessionID"];
                var user = Session["User"];
                if (userSessionID == null || user == null)
                {
                    Logon(filterContext);
                } 
            }        private void Logon(ActionExecutingContext filterContext )
            {
                RouteValueDictionary dictionary = new RouteValueDictionary
                (new
                {
                    controller = "Account",
                    action = "Logon",
                    returnUrl = filterContext.HttpContext.Request.RawUrl
                });
                filterContext.Result = new RedirectToRouteResult(dictionary);
               }
           }
      

  2.   

      public class CheckSessionFilterAttribute : ActionFilterAttribute
        {
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                HttpContext httpcontext = HttpContext.Current; //获取当前的 HttpSessionState   
                var userSessionID = httpcontext.Session["UserSessionID"];
                if (userSessionID == null)
                {
                    Logon(filterContext);
                }
                if( httpcontext.Session != null )            
                {             
                    //确认Session是否已建立            
                    if( httpcontext.Session.IsNewSession )       
                    {                                      
                        //確認是否已存在cookies                 
                        String sessioncookie = httpcontext.Request.Headers[ "Cookie" ];             
                        if( (sessioncookie != null ) && ( sessioncookie.IndexOf( "ASP.NET_SessionId" ) >= 0 ))
                        {      
                            Logon( filterContext );               
                        }            
                    }            
                }          
                base.OnActionExecuting( filterContext );      
            }        /// <summary>
            /// 路由到登录页面
            /// </summary>
            /// <param name="filterContext"></param>
            private void Logon(ActionExecutingContext filterContext )
            {
                RouteValueDictionary dictionary = new RouteValueDictionary
                (new
                {
                    controller = "Account",
                    action = "Logon",
                    returnUrl = filterContext.HttpContext.Request.RawUrl
                });
                filterContext.Result = new RedirectToRouteResult(dictionary);
               }
           }