В моем приложении mpc3 asp.net у меня есть настраиваемый атрибут авторизации, как показано ниже.
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
, который, насколько я понимаю, должен позволять мне контролировать поведение несанкционированного запроса, не работает вообще. Я поставил там точку останова, я поставил там код, я несанкционирован доступ к своему приложению, и код никогда не запускается.
Что мне не хватает?
EDIT: Я сделал еще несколько исследований и нашел несколько других людей, у которых была эта проблема, но к сожалению не было.
EDIT2: Пример кода
[CustomAuthorize]
public class UserController: Controller
{
public UserController()
{
//do stuff here
}
}
ИЗМЕНИТЬ 3: @Fabio
Вот что я пытаюсь сделать. У меня есть страница входа в систему (формы auth), которая работает нормально - она вызывает мой пользовательский логин, а затем вызывает мой авторизатор AuthorizeCore. Мое приложение использует большое количество вызовов ajax, и моя конечная цель - всякий раз, когда пользователь использует приложение, а администратор отключает их, делая вызов ajax после того, как он отключен (хотя он все еще входит в систему) должен вывести их из системы. Однако, чтобы сделать это, я хочу вернуть пользовательский ответ, если пользователь делает вызов ajax, и для этого мне нужно ovverride HandleUnauthorizedRequest. Но мой Authorize Core (и по расширению HandleUnauthorizedRequest) игнорируется, если пользователь вошел в систему (несмотря на то, что у меня есть customauthorize теги во всех моих действиях контроллера, которые вызывает ajax).
Вкратце: я хочу авторизовать пользователя по каждому запросу, а не только для запроса на вход (который, похоже, сейчас делает поставщик членства)