Nella mia applicazione asp.net mvc3, ho un attributo di autorizzazione personalizzato come mostrato di seguito.HandleUnauthorizedRequest not overriding
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);
}
}
devo il tag [CustomAuthorize]
sulle mie azioni di controllo, e il metodo AuthorizeCore
funziona bene - esegue la logica voglio che (assicurandosi che l'account è effettivamente abilitato), e poi tornare come tale.
Tuttavia, il metodo sostituito HandleUnauthorizedRequest
, che, a quanto ho capito, dovrebbe consentirmi di controllare il comportamento di una richiesta non autorizzata, non è in esecuzione. Inserisco un breakpoint, inserisco il codice, accedo alla mia applicazione non autorizzata e il codice non funziona mai.
Cosa mi manca?
EDIT: Ho fatto qualche altra ricerca e ho trovato alcune altre persone che hanno avuto questo problema, ma purtroppo nessuna soluzione.
EDIT2: Codice di esempio
[CustomAuthorize]
public class UserController: Controller
{
public UserController()
{
//do stuff here
}
}
EDIT 3: @Fabio
Ecco quello che sto cercando di fare. Ho una pagina di accesso (auth di moduli) che funziona bene - chiama il mio login personalizzato, quindi chiama la mia autorizzazione di AuthorizeCore. La mia applicazione utilizza una grande quantità di chiamate Ajax, e il mio obiettivo finale è per ogni volta che un utente sta usando l'applicazione, e l'amministratore li disabilita, effettuare una chiamata Ajax dopo essere stato disabilitato (anche se è ancora connesso) dovrebbe effettuare il logout. Tuttavia, per fare ciò, voglio restituire una risposta personalizzata se l'utente sta effettuando una chiamata Ajax e, per questo, ho bisogno di sovrascrivere HandleUnauthorizedRequest. Ma il mio Authorize Core (e per estensione HandleUnauthorizedRequest) vengono ignorati se l'utente ha effettuato l'accesso (nonostante io abbia i tag di autorizzazione personalizzati su tutte le azioni del mio controller che l'ajax sta chiamando).
In breve: Voglio autorizzare l'utente a ogni richiesta, non solo la richiesta di accesso (che sembra essere ciò che il provider di appartenenze sta facendo adesso)
Avete qualsiasi altro attributo che ereditano da AuthorizeAttribute? Hai impostato AuthorizeAttribute a livello di classe o su una classe base? –
Ho un provider di appartenenze personalizzato, questa classe è dichiarata nello stesso file. Non ho altri attributi che ereditano da AuthorizeAttribute per quanto ne so. – Mansfield
Un breakpoint inserito nell'interruzione di AuthorizeCore, come previsto? –