代碼調用順序為:OnAuthorization--AuthorizeCore--HandleUnauthorizedRequest 如果AuthorizeCore返回false時,才會走HandleUnauthorizedRequest 方法,并且filterContext.Result是HttpUnauthorizedResult類型(注:StausCode=401),401錯誤又對應了Web.confi
代碼調用順序為:OnAuthorization-->AuthorizeCore-->HandleUnauthorizedRequest
如果AuthorizeCore返回false時,才會走HandleUnauthorizedRequest 方法,并且filterContext.Result是HttpUnauthorizedResult類型(注:StausCode=401),401錯誤又對應了Web.config中的
所以,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;
}
新聞熱點
疑難解答
圖片精選