2013-09-27 153 views
7

Ai đó có thể giải thích lý do vòng đời thuộc tính ủy quyền dường như được quản lý liên quan đến lớp hoặc phương pháp mà nó được áp dụng? Điều này trái ngược với quản lý liên quan đến vòng đời yêu cầu.Ủy quyền Vòng đời thuộc tính

Nếu tôi trang trí bộ điều khiển ở cấp lớp, hàm tạo thuộc tính ủy quyền chỉ được gọi một lần trên nhiều yêu cầu đến cùng một bộ điều khiển. Nếu tôi trang trí mỗi phương thức điều khiển thì tôi nhận được các phép gọi hàm tạo thuộc tính mới cho mỗi phương thức điều khiển được gọi.

Hành vi này là gì? Tôi hy vọng việc tạo thuộc tính ủy quyền sẽ xảy ra mọi yêu cầu.

+0

Bạn xác định rằng nó chỉ được gọi một lần khi được áp dụng cho lớp học? AFAIK, bộ điều khiển được khởi tạo và hủy với mỗi yêu cầu. Nó thuộc loại * có *, hoặc bạn sẽ bị ô nhiễm chéo. Có thể là khi gỡ lỗi trong Visual Studio rằng nó phá vỡ điều này vì một lý do nào đó, nhưng nếu bạn kết thúc với cùng một cá thể bộ điều khiển cho mọi yêu cầu trên IIS thực, thì có một vấn đề. –

+0

Chris, tôi không nói về vòng đời của bộ điều khiển. Thay vào đó, tôi hỏi về vòng đời của AuthorizeAttribute. AuthorizeAttribute không được tạo cho mọi yêu cầu và tôi mong đợi nó sẽ như thế. Thật không may, điều đó dẫn đến một số vấn đề cho ứng dụng hiện tại này bởi vì chúng ta phải sửa đổi các Vai trò trong thời gian chạy. – Daniel

Trả lời

8

ASP.NET MVC sẽ lưu bộ nhớ cache ActionFilters và cố gắng sử dụng lại chúng trên các yêu cầu tiếp theo. Việc ủy ​​quyền thực tế sẽ xảy ra trên mỗi yêu cầu nhưng contructor sẽ chỉ được gọi trên đầu tiên. Bạn không nên duy trì bất kỳ trạng thái nội bộ nào trong ActionFilter.