原文链接:Understanding Action Filters

一、定义

Action筛选器是一个属性,你可以应用于控制器的Action方法— —或整个控制器— —修改在其中执行此Action的方式。

1.OutputCache – 此Action筛选器缓存控制器的Action输出为指定的时间量。

2.HandleError – 此Action筛选器处理引发的控制器Action执行时的错误。

3.Authorize – 此操作筛选器使您可以限制对特定用户或角色的访问。

您还可以创建您自己的自定义操作筛选器。例如,您可能想要创建一个自定义操作筛选器,以执行自定义身份验证系统。或者,您可能想要创建操作筛选器来修改视图数据返回一个控制器动作。

二、默认分类

ASP.NETMVC框架支持四种不同类型的筛选器︰

Authorization filters – Implements theIAuthorizationFilterattribute.

Action filters – Implements theIActionFilterattribute.

Result filters – Implements theIResultFilterattribute.

Exception filters – Implements theIExceptionFilterattribute.

执行顺序:授权筛选器优先级最高;异常筛选器优先级最低。

Authorization筛选器用来实现身份验证和授权控制器操作。例如,Authorize筛选器是Authorization筛选器示例。

Action筛选器包含的逻辑,执行之前和之后的控制器操作执行。您可以使用操作筛选器,例如,修改控制器操作返回的视图数据。

Result筛选器包含的逻辑,执行之前和之后执行视图结果。例如,您可能想要修改视图结果在视图呈现到浏览器之前。

Exception筛选器是最后一种类型的筛选器来运行。异常筛选器可用于处理由您的控制器操作或控制器操作结果引发的错误。您还可以使用异常筛选器记录错误。

每种不同类型的筛选器是按特定的顺序执行的。如果你想要控制在其中执行相同类型的筛选器的顺序,然后你可以设置筛选器的Order属性。

所有操作筛选器的基类是System.Web.Mvc.FilterAttribute类。如果你想要执行特定类型的筛选器,然后你需要创建一个类,从筛选器基类继承并实现一个或更多的IAuthorizationFilter、IActionFilter、IResultFilter,或ExceptionFilter接口。

三、ActionFilterAttribute基类

为了更容易为你执行自定义操作筛选器,ASP.NETMVC框架提供ActionFilterAttribute基类。此类实现的IActionFilter和IResultFilter接口,并从筛选器类继承。

从技术上讲,从ActionFilterAttribute类继承的类是操作筛选器和结果筛选器。然而,整体来说,操作筛选器用于指任何类型的ASP.NETMVC框架中的筛选器。

ActionFilterAttribute基类有四个方法可以被重写:

OnActionExecuting – This method is called before a controller action is executed.

OnActionExecuted – This method is called after a controller action is executed.

OnResultExecuting – This method is called before a controller action result is executed.

OnResultExecuted – This method is called after a controller action result is executed.