2013-09-27 9 views
7

Czy ktoś może wyjaśnić, dlaczego cykl życia atrybutu authorize wydaje się być zarządzany w odniesieniu do klasy lub metody, do której ma zastosowanie? Jest to w przeciwieństwie do zarządzania w odniesieniu do cyklu życia żądania.Authorize Attribute Lifecycle

Jeśli zdobędę kontroler na poziomie klasy, autoryzujący się konstruktor atrybutów zostanie wywołany tylko raz w wielu żądaniach do tego samego kontrolera. Jeśli ozdobię każdą metodę kontrolera, otrzymam nowe wywołanie konstruktora atrybutów atrybutu dla każdej wywołanej metody kontrolera.

O co w tym wszystkim chodzi? Oczekuję, że autoryzacja tworzenia atrybutów stanie się każdym żądaniem.

+0

Jak ustalacie, że jest on wywoływany tylko raz, gdy zostanie zastosowany do klasy? AFAIK, kontroler jest tworzony i niszczony przy każdym żądaniu. To rodzaj * ma * być, albo skończyłoby się zanieczyszczeniem na żądanie. Możliwe, że podczas debugowania w Visual Studio obejdzie to z jakiegoś powodu, ale jeśli otrzymasz tę samą instancję kontrolera dla każdego żądania na prawdziwym IIS, to jest problem. –

+0

Chris, nie mówiłem o cyklu życia kontrolera. Raczej, pytam o cykl życia AuthorizeAttribute. AuthorizeAttribute nie jest tworzony dla każdego żądania i oczekiwałem, że będzie. Niestety, prowadzi to do problemów z bieżącą aplikacją, ponieważ musimy zmodyfikować role w czasie wykonywania. – Daniel

Odpowiedz

8

Program ASP.NET MVC buforuje ActionFiltery i próbuje ponownie użyć ich w kolejnych żądaniach. Faktyczna autoryzacja pojawi się przy każdym żądaniu, ale contructor zostanie wywołany tylko na pierwszym. Nie należy utrzymywać żadnego stanu wewnętrznego w filtrze ActionFilter.

Powiązane problemy