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");
}
}
}
}