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