Welcome 微信登录

首页 / 网页编程 / ASP.NET / ASP.NET MVC笔记之Action过滤器

ASP.NET MVC笔记之Action过滤器2011-08-01 博客园 JohnhormyAction 过滤器在代码中体现为添加到Action上方的属性,MVC框架包含了一些过滤器,如:

OutputCache –指示Controller在指定时间内缓存返回的结果。

HandleError –处理Contrller中Action抛出的异常

Authorize – 约束特定用户或角色对Action的访问

另外你还可以自己定义过滤器,比如:你想使用自定义的验证机制;你想修改Action返回的数据等等 。

使用Action 过滤器

Action 过滤器不仅可以控制单个Action,也可以控制整个Contrller。同时,一个Action可以应用多 个过滤器。比如:

public class DataController : Controller
{
[OutputCache(Duration=10)]
public string Index()
{
return DateTime.Now.ToString("T");
}
}

这个Action返回了当前时间,但是你若在10秒钟内刷新界面,你会一直得到同一个值,因为这里使用 了OutputCache(Duration=10)。

过滤器的类型

ASP.NET MVC 框架支持以下几种过滤器:

1、Authorization 过滤器– 实现了 IAuthorizationFilter 接口。这一类的过滤器用来实现用户验 证和对Action的访问授权。比如Authorize 就属于Authorization 过滤器。

2、Action 过滤器– 实现了 IActionFilter 接口。它可以包含一些Action执行前或者执行后的逻辑 ,比如有一些过滤器专门用来修改Action返回的数据。

3、Result 过滤器– 实现了 IResultFilter 接口。它可以包含一些view result生成前或者生成后的 逻辑,比如有一些过滤器专门用来修改视图向浏览器展现前的结果。

4、Exception 过滤器– 实现了IExceptionFilter 接口。它用以用来处理Action或者Result的错误 ,也可以记录错误。

过滤器的默认执行顺序也和上面的列表相同,比如Authorization 过滤器会先于Action 过滤器执行, 而Exception 过滤器总会在最后执行。当然你也可以根据需要通过Order属性设定过滤器执行的顺序。

自定义过滤器

自定义过滤器必须继承System.Web.Mvc.FilterAttribute ,并且实现上述几个接口中的一个或者多个 。MVC框架为了方便开发人员,预定义了一个ActionFilterAttribute 类,它已实现了IActionFilter 和 IResultFilter 接口。你可以重载ActionFilterAttribute 类中以下几个方法:

OnActionExecuting – 在Action执行之前调用。

OnActionExecuted – 在Action执行之后调用。

OnResultExecuting – 在Result产生之前调用。

OnResultExecuted – 在Result产生之前调用。