В моем приложении asp.net mvc3 у меня есть собственный атрибут авторизации, как показано ниже.
public class CustomAuthorize : AuthorizeAttribute
{
public IAccountRepository AccountRepository { get; set; }
public CustomAuthorize()
{
this.AccountRepository = new UserModel();
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
base.AuthorizeCore(httpContext);
return AccountRepository.isEnabled(HttpContext.Current.User.Identity.Name);
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);
}
}
У меня есть тег [CustomAuthorize]
в действиях моего контроллера, и метод AuthorizeCore
работает нормально — он выполняет логику, которую я хочу (убедившись, что учетная запись действительно включена ), а затем возвращаются как таковые.
Однако переопределенный метод HandleUnauthorizedRequest
, который, как я понимаю, должен позволять мне контролировать поведение неавторизованного запроса, вообще не работает. Я ставлю там точку останова, добавляю туда код, получаю неавторизованный доступ к своему приложению, и код никогда не запускается.
Что я упускаю?
РЕДАКТИРОВАТЬ: Я провел дополнительное исследование и нашел несколько других людей, у которых была эта проблема, но, к сожалению, не нашел решения.
EDIT2: пример кода
[CustomAuthorize]
public class UserController: Controller
{
public UserController()
{
//do stuff here
}
}
EDIT 3: @Fabio
Вот что я пытаюсь сделать. У меня есть страница входа (аутентификация форм), которая работает нормально — она вызывает мой собственный логин, а затем вызывает переопределение AuthorizeCore. Мое приложение использует большое количество вызовов ajax, и моя конечная цель заключается в том, чтобы всякий раз, когда пользователь использует приложение, а администратор отключает их, выполнение вызова ajax после отключения (хотя все еще вход в систему) должен выйти из них. Однако для этого я хочу вернуть собственный ответ, если пользователь делает вызов ajax, и для этого мне нужно переопределить HandleUnauthorizedRequest.Но мое ядро авторизации (и по расширению HandleUnauthorizedRequest) игнорируется, если пользователь вошел в систему (несмотря на тот факт, что у меня есть теги customauthorize для всех действий моего контроллера, которые вызывает ajax).
Вкратце: я хочу авторизовать пользователя при каждом запросе, а не только при входе в систему (что, похоже, сейчас делает провайдер членства)