2013-09-27 9 views
7

Qualcuno può spiegare perché il ciclo di vita degli attributi di autorizzazione sembra essere gestito in relazione alla classe o al metodo a cui è applicato? Questo è in contrasto con la gestione relativa al ciclo di vita della richiesta.Authorize Attribute Lifecycle

Se decorare un controller a livello di classe, il costruttore di attributi autorizza viene chiamato una sola volta su più richieste allo stesso controller. Se decoro ogni metodo di controller, ricevo nuove chiamate di costruzione degli attributi autorizzabili per ogni metodo del controller chiamato.

Di cosa si tratta? Mi aspetterei che la creazione di attributi autorizza ogni richiesta.

+0

Come si determina che viene chiamato una sola volta quando viene applicato alla classe? AFAIK, il controller viene istanziato e distrutto ad ogni richiesta. È tipo * deve * essere o finire con l'inquinamento da richiesta incrociata. È possibile che, durante il debug in Visual Studio, si elimini ciò per qualche motivo, ma se si finisce con la stessa istanza controller per ogni richiesta su IIS reale, allora c'è un problema. –

+0

Chris, non stavo parlando del ciclo di vita del controller. Piuttosto, sto chiedendo del ciclo di vita dell'AutorizzazioneAttributo. AuthorizeAttribute non è stato creato per ogni richiesta e mi aspettavo che lo fosse. Sfortunatamente, questo porta ad alcuni problemi per questa applicazione attuale, poiché dobbiamo modificare i ruoli in fase di runtime. – Daniel

risposta

8

ASP.NET MVC memorizza nella cache ActionFilters e tenta di riutilizzarli nelle richieste successive. L'autorizzazione effettiva avverrà su ogni richiesta ma il contructor verrà chiamato solo il primo. Non si dovrebbe mantenere alcun stato interno in un ActionFilter.

Problemi correlati