2013-09-27 5 views
7

authorize 특성 수명주기가 적용되는 클래스 또는 메서드와 관련하여 관리되는 것으로 나타나는 이유를 설명 할 수 있습니까? 이것은 요청 수명주기와 관련하여 관리되는 것과 반대입니다.특성 수명주기 승인

클래스 수준에서 컨트롤러를 꾸미면 권한 부여 특성 생성자는 동일한 컨트롤러에 대한 여러 요청에서 한 번만 호출됩니다. 각 컨트롤러 메서드를 장식하면 호출 된 각 컨트롤러 메서드에 대해 새로운 authorize 특성 생성자 호출이 발생합니다.

이 문제는 무엇에 관한 것입니까? 나는 요청마다 속성 생성 권한 부여를 기대합니다.

+0

클래스에 적용될 때 한 번만 호출되는 것을 어떻게 결정합니까? AFAIK, 컨트롤러는 각 요청에 따라 인스턴스화되고 파괴됩니다. 그런 종류의 것이거나 교차 오염 공해로 끝날 것입니다. Visual Studio에서 디버깅 할 때 어떤 이유로 든이를 피할 수 있지만 실제 IIS에서 요청할 때마다 동일한 컨트롤러 인스턴스로 끝나는 경우 문제가 발생할 수 있습니다. –

+0

Chris, 컨트롤러의 수명주기에 대해 이야기하는 것이 아닙니다. 오히려 AuthorizeAttribute의 수명주기에 대해 묻고 있습니다. 모든 요청에 ​​대해 AuthorizeAttribute가 만들어지지 않았으며 예상 한대로였습니다. 런타임에 역할을 수정해야하므로 불행히도이 현재 응용 프로그램에 대한 몇 가지 문제가 발생합니다. – Daniel

답변

8

ASP.NET MVC는 ActionFilters를 캐시에 저장하고 이후 요청에서 다시 사용하려고합니다. 실제 승인은 각 요청에 대해 발생하지만 생성자는 첫 번째 요청에 대해서만 호출됩니다. ActionFilter에서 내부 상태를 유지하면 안됩니다.