代码调用顺序为:OnAuthorization-->AuthorizeCore-->HandleUnauthorizedRequest

如果AuthorizeCore返回false时,才会走HandleUnauthorizedRequest 方法,并且filterContext.Result是HttpUnauthorizedResult类型(注: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;    //由于JsonResult无对应StatusCode,而在AuthorizeCore中我们把httpContext.Response.StatusCode=401,所以会跳转到 web.config 中定义的  loginUrl。猜想: filterContext.Result可以赋值为                                                    //RedirectResult、HttpUnauthorizedResult等,若没有StatusCode(像JsonResult),则会检查Response.StatusCode

}
           
}
            if (App.AppService.IsLogon)
            {
               
return;
            }

base.HandleUnauthorizedRequest(filterContext);
            if
(filterContext.HttpContext.Response.StatusCode == 401) //对于401错误,默认会跳转到web.config 中定义的  loginUrl
           
{
                filterContext.Result = new
RedirectResult("/");
            }
        }

}

最新文章

  1. Django model字段类型清单
  2. php中的curl使用入门教程和常见用法实例
  3. iframe在ios下无故扩大的问题探究
  4. POJ1185炮兵阵地(状态压缩 + dp)
  5. iOS 学习笔记 七 (2015.03.29)code snippet操作
  6. Java 中判断两个对象是否相等
  7. iOS开发——动画编程Swift篇&amp;(二)UIView转场动画
  8. java集合类(五)About Map
  9. 团体程序设计天梯赛-练习集L1-001. Hello World
  10. Xamarin几十篇博客,roslyn和dotnet也开源了
  11. 【初学者必读】能让你月薪过万的5大web前端核心技能
  12. iOS通用链接(Universal Links)突然点击无效的解决方案
  13. ansible-playbook相关
  14. 【Python实践-1】求一元二次方程的两个解
  15. hbase-hive整合及sqoop的安装配置使用
  16. Spooling Directory Source使用技巧
  17. 再读c++primer plus 006
  18. pg_stat_statements跳过的坑
  19. [Java]-Java的版本演化
  20. HDUOJ-----2571跳舞毯

热门文章

  1. ASP.NET MVC4中用 BundleCollection
  2. php+gd库的源码安装
  3. DuiLib(一)——窗口及消息
  4. PI-webservice05-SAP调用外部webservice
  5. VVDocumenter - Xcod代码注释工具
  6. [GIF] GIF Loop Coder Single Mode
  7. 统计0到n之间1的个数
  8. enum 在c中的使用
  9. xampp
  10. LINUX 内核2