2013-02-14 77 views
23

我看到,在一个情况下,我们可以覆盖OnActionExecutingOnActionExecuted方法继承了ActionFilterAttribute类是这样的:在asp.net mvc 3中实现FilterAttribute,IActionFilter和从ActionFilterAttribute继承有什么区别?

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

而在其他情况下,我们还可以实现IActionFilterFilterAttribute这样的:

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

那么,这两种方法之间是否存在任何差异,可能是任何特定的情况下,最好使用其中一种方法?

在此先感谢。

回答

16

基本上FilterAttribute提供了MVC Attribute的最低级别行为,并实现了提供Order和AllowMultiple属性的IMvcFilter。

ActionFilterAttribute是过滤操作和结果的基础,因为是IActionFilter,IResultFilter的实现并从FilterAttribute继承。

MySecondFilterAttribute实现导致ActionFilterAttribute没有IResultFilter功能(OnResultExecuting和OnResultExecuted)。

相关问题