Asp.Net MVC: пользовательский атрибут AuthorizeAttribute filterContext.Result - это HttpUnauthorizedResult = true при сборке

У меня есть пользовательский поставщик ролей с пользовательским атрибутом AuthorizeAttribute, который будет перенаправлять на страницу с отказом в доступе, если они не являются членами определенной роли. Когда я создаю проект из Visual Studio и открываю страницу (имеет AccessDeniedAuthorizeAttribute в методе действия) в браузере, filterContext.Result is HttpUnauthorizedResult всегда верно и перенаправляет на страницу AccessDenied. Но при следующем обновлении работает нормально. Есть идеи?

public class AccessDeniedAuthorizeAttribute : AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            base.OnAuthorization(filterContext);

            if (filterContext.Result is HttpUnauthorizedResult) //Unauthorized request
            {
              //check if user is not logged in then redirect to login page
              if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
              {
                filterContext.Result = new RedirectResult(System.Web.Security.FormsAuthentication.LoginUrl + "?returnUrl=" +
                filterContext.HttpContext.Server.UrlEncode(filterContext.HttpContext.Request.RawUrl));
              }
              else //user is logged in but don't have required roles to access page
              {
                filterContext.Controller.TempData["NeededRoles"] = base.Roles;
                filterContext.Result = new RedirectResult("~/AccessDenied");
              }
            }
        }
    }

0 ответов

Другие вопросы по тегам