代码调用顺序为:OnAuthorization-->AuthorizeCore-->HandleUnauthorizedRequest
如果AuthorizeCore返回false时,才会走基类的HandleUnauthorizedRequest 方法,并且Response.StausCode会返回401,401错误又对应了Web.config中的
<authentication mode="Forms">
      <forms loginUrl="~/" 
timeout="2880" />
    </authentication>
所以,AuthorizeCore==false 时,会跳转到 web.config 中定义的 loginUrl="~/"
 public class CheckLoginAttribute : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase 
httpContext)        {
            bool Pass = false;
            if 
(!CheckLogin.AdminLoginCheck())
            {
                
httpContext.Response.StatusCode = 401;//无权限状态码
                Pass = 
false;
            }
            else 
            {
                
Pass = true;
            }
            return Pass;
        }
        protected override void 
HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            
if(filterContext.HttpContext.Request.IsAjaxRequest())
            
{
                if (!App.AppService.IsLogon)
                {
                    filterContext.Result = new 
JsonResult
                                               
{
                                                   Data = new {IsSuccess = 
false, Message = 
"不好意思,登录超时,请重新登录再操作!"},
                                                   
JsonRequestBehavior = 
JsonRequestBehavior.AllowGet
                                               
};
                    return;    //会跳转到 web.config 中定义的  loginUrl
                }
            
}
            if (App.AppService.IsLogon)
            {
                
return;
            }
            base.HandleUnauthorizedRequest(filterContext);
            if 
(filterContext.HttpContext.Response.StatusCode == 401) //对于401错误,默认会跳转到web.config 中定义的  loginUrl
            
{
                filterContext.Result = new 
RedirectResult("/");
            }
        }
}