Nie wiem, czy to pomaga w ogóle, ale wpadłem na tej samej rzeczy i ustalił, że, przynajmniej dla moich celów, nie trzeba zastąpić AuthorizeCore w ogóle. Nie jestem pewien, dlaczego tak jest, szczerze mówiąc. Jak MSDN mówi, OnAuthorization jest wywoływana "gdy proces żąda autoryzacji". Oznacza to, że będzie on wywoływany dla każdej metody, która ma atrybut AuthorizeWithRoles. Możesz umieścić swój niestandardowy kod w OnAuthorization, aby sprawdzić, czy użytkownik ma uprawnienia, a ponieważ możesz uzyskać httpContext z filtersContext, to naprawdę nie ma potrzeby dla AuthorizeCore. Oto prosty przykład, który działa dla mnie:
public class LoginRequired : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (Common.ValidateCurrentSession(filterContext.HttpContext))
{
//this is valid; keep going
return;
}
else
{
//this is not valid; redirect
filterContext.Result = new RedirectResult("/login");
}
}
}
Mam nadzieję, że to pomaga. Poza tym oczywiście musisz zadeklarować, że OnAuthorization jest nadpisaniem.
EDYCJA: Wierzę, że podstawowa metoda OnAuthorization wywołuje AuthorizeCore. Ponieważ nadpisujesz OnAuthorization, oczywiście połączenie jest tracone. Uważam, że nadpisanie AuthorizeCore byłoby istotne tylko wtedy, gdy opuściłeś OnAuthorization samodzielnie lub jeśli wywołałeś base.OnAuthorization (filterContext) w ramach metody nadpisanej.
-1 Nie powinieneś nadpisywać 'OnAuthorization', wprowadzasz problem bezpieczeństwa. Zobacz moją odpowiedź. – Stijn