37

我看到在一种情况下,我们可以像这样覆盖OnActionExecutingOnActionExecuted继承自ActionFilterAttribute类的方法:

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

IActionFilter在其他情况下,我们也可以FilterAttribute像这样实现:

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

那么,这两种方法之间是否有任何区别,也许在任何特定情况下,最好使用其中一种而不是另一种?

提前致谢。

4

1 回答 1

28

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

ActionFilterAttribute 是过滤动作和结果的基础,因为它是 IActionFilter、IResultFilter 的实现,并继承自 FilterAttribute。

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

于 2013-02-14T22:32:53.650 回答