2013-02-14 32 views
23

Tôi thấy rằng trong một tình huống chúng ta có thể ghi đè lên OnActionExecuting hoặc OnActionExecuted phương pháp kế thừa từ ActionFilterAttribute lớp như thế này:Sự khác biệt giữa việc triển khai FilterAttribute, IActionFilter và kế thừa từ ActionFilterAttribute trong asp.net mvc 3 là gì?

public class MyFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { // bla bla } 
} 

Và trong tình huống khác mà chúng tôi cũng có thể thực hiện IActionFilterFilterAttribute như thế này:

public class MySecondFilterAttribute : FilterAttribute, IActionFilter 
{ 
    public void OnActionExecuted(ActionExecutingContext filterContext) {} 
} 

Vì vậy, có bất kỳ sự khác biệt nào giữa hai cách tiếp cận này, có lẽ là bất kỳ tình huống cụ thể nào mà nó sẽ thích hợp hơn khi sử dụng một trong số chúng?

Xin cảm ơn trước.

Trả lời

16

Về cơ bản FilterAttribute cung cấp hành vi cấp thấp nhất của Thuộc tính MVC và triển khai IMvcFilter cung cấp các thuộc tính Order và AllowMultiple.

Hành độngFilterThuộc tính là cơ sở để lọc hành động và kết quả, vì đó là việc triển khai IActionFilter, IResultFilter và kế thừa từ FilterAttribute.

MySecondFilterThực hiện thuộc tính dẫn đến ActionFilterAttribute không có khả năng IResultFilter (OnResultExecuting và OnResultExecuted).

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