2011-06-19 22 views
29

Tôi chỉ nhìn vào một số mã cũ của tôi và tôi có một bộ lọc hành động (phương pháp OnActionExecuting)Tại sao gọi base.OnActionExecuting (filterContext) ;?

và ở phần cuối của nó tôi có

base.OnActionExecuting(filterContext); 

Tại sao tìm kiếm xung quanh tôi thấy điều này khá một vài lần. Tôi cũng thấy rằng trong thẻ Authorize cũ tôi gọi là cơ sở.

Tôi có nên luôn gọi phương thức cơ sở sau không?

Trả lời

50

Tôi có nên luôn gọi phương pháp cơ sở sau không?

Điều đó sẽ tùy thuộc vào tình huống.

Ví dụ trong bộ lọc ủy quyền (xuất phát từ AuthorizeAttribute) nếu bạn gọi phương thức cơ sở thì tất cả logic ủy quyền hiện có được tích hợp vào ASP.NET MVC sẽ được thực hiện. Nếu bạn không gọi nó, chỉ logic ủy quyền của bạn sẽ được áp dụng.

Theo như bộ lọc hành động tiêu chuẩn khác có liên quan (bắt nguồn từ ActionFilterAttribute) tất cả các OnActionExecuting, OnActionExecuted, OnResultExecutingOnResultExecuted được định nghĩa là ảo nhưng cơ thể của họ là trống rỗng, vì vậy nó không thực hiện bất kỳ sự khác biệt nếu bạn gọi hay không phương pháp cơ sở.

1

Tôi tin rằng nếu bạn để Visual Studio tự động tạo phương pháp ghi đè bằng cách nhập override và chọn phương pháp trong tab intellisense và nhấn, Visual Studio sẽ tự động thêm base.MethodName() vào phần thân phương thức.

Nếu bạn không cần, hãy xóa nó. Tôi đã luôn xóa nó khi tạo số ActionFilter của mình và chưa gặp sự cố. Thời gian duy nhất bạn không nên loại bỏ nó là khi bạn cần phương thức cơ sở được gọi.

+1

Tôi đoán câu hỏi sẽ là làm thế nào để bạn biết khi nào bạn cần gọi cơ sở. Tôi thực sự không biết những gì các hành vi mặc định của nói một base.OnActionExecuted() nào. – chobo2

+1

@ chobo2: Có vẻ như Darin Dimitrov đã trả lời câu hỏi trên (liên quan đến hành vi mặc định của các phương pháp ActionFilter) và bạn có thể đánh dấu câu trả lời (hoàn chỉnh hơn) của mình như được chấp nhận. – xTRUMANx

Các vấn đề liên quan