技术开发 频道

ASP.NET MVC Action Filter与内置的Filter实现

  【IT168 技术文档】有时候你想在调用action方法之前或者action方法之后处理一些逻辑,为了支持这个,ASP.NET MVC允许你创建action过滤器。Action过滤器是自定义的Attributes,用来标记添加Action方法之前或者Action方法之后的行为到控制器类中的Action方法中。

  一些可能用到Action过滤器的地方有:

  日志,异常处理
  身份验证和授权 - 限制用户的访问
  输出缓存 - 保存一个Action的结果
  网络爬虫的过滤
  本地化
  动态Action - 将一个Action注入到控制器中
  ASP.NET MVC为我们提供了下面的几个Filter接口:

IActionFilter
IAuthorizationFilter
IExceptionFilter
IResultFilter

  要实现一个Filter,我们需要继承自FilterAttribute类同时实现上面的一个或几个接口:

public class MyFilter : FilterAttribute, IActionFilter, IResultFilter
{
}

  这几个接口提供的方法如下:

 

  上图的方法和Filter接口对应的方法按名称对号入座就可以。

  IActionFilter接口有两个方法:

 

  其中OnActionExecuting在执行Action方法之前会被调用,OnActionExecuted会在Action方法执行后调用。注意他们的参数分别是ActionExecutingContext和ActionExecutedContext。

  ActionExecutedContext类包含一个 Canceled的属性,允许你取消当前的Action(怎么原来在P3中是在ActionExecutingContext的Canceled属性在P5中没有了呢?神奇.那么在OnActionExecuting的时候怎么取消一个Action呢?)。

  FilterExcutedContext 类包含一个Exception属性和一个ExceptionHandled属性。如果Exception属性为null,则没有异常在action stack中,表明Action方法运行并没有发生错误。反之则为出现异常。如果将ExceptionHandled属性设置为true则表明在这个Filter中已经处理了异常。

  IResultFilter接口也提供了两个方法:

 

  他们分别在Action返回结果(例如return View();)之前和之后执行。和IActionFilter差不多就不多说了。

  IAuthorizationFilter是一个用于身份验证的Filter。只提供了一个void OnAuthorization(AuthorizationContext filterContext)方法。

  IExceptionFilter会在出现异常的时候调用,也是只 提供一个void OnException(ExceptionContext filterContext)的方法;

0
相关文章