ASP.NET MVC 过滤器

  前段时间从外包公司回来,回到公司加入到了公司项目中的开发。看到项目中用到了过滤器,以前没接触过,到网上查了一下,结合项目与自己的理解记录一下。

  1、为什么要用到过滤器。2、它能解决什么问题 3、是否会带来新问题,严重不,我们是否能够解决掉?

  在实际项目中,稍微像样点的项目总会有一些相关的AOP(面向切面,也叫做面向面)编程的组件,而MVC项目中太关心我们这些农民工啦,不想让MVC开发人员去为了身份验证、日志、异常等部分重复代码。于是我们在MVC项目中就可以直接使用它提供的Fileter特性帮我们解决,不用我们自己去实现复杂的AOP了。 

  以日志为例:

 

  [LogActionFilter(Message="打开企业列表")]
  public ActionResult Index()
  {
    return View();
  }

  

  [LogActionFilter(Message="添加企业")]
  public ActionResult Add(Contact contact)
  {
    return View();
  }


public class LogActionFilter : ActionFilterAttribute {

    public string Message { get; set; }
    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
      //记录操作日志,写进操作日志中
      var controllerName = filterContext.RouteData.Values["controller"];
      var actionName = filterContext.RouteData.Values["action"];
    }


   }

在合适的地方用到适当的Filter,ASP.NET MVC提供了几个默认的Filter

 

 

Filter Type

实现接口

执行时间

Default Implementation

Authorization filter

IAuthorizationFilter

在所有FilterAction执行之前执行

AuthorizeAttribute

Action filter

IActionFilter

分别在Action执行之前和之后执行。

ActionFilterAttribute

Result filter

IResultFilter

分别在Action Result执行之后和之前

ResultFilterAttribute

Exception filter

IExceptionFilter

只有在filter,

或者 action method, 或者 action result 抛出一个异常时候执行

 

HandleErrorAttribute

 

 

 

 

 

 

 

 

 

 

 

 

  因为ActionFilterAttribute默认实现了IActionFilter和IResultFilter。而ActionFilterAttribute是一个抽象类型,所以不能直接被实例化使用,所以我们想使用的话必须继承一下才能够使用。我们可以重载ActionFilterAttribute类中的以下几个方法:

  OnActionExecuting – 在Action执行之前调用。 
  OnActionExecuted – 在Action执行之后调用。 
  OnResultExecuting – 在Result产生之前调用。 
  OnResultExecuted – 在Result产生之前调用。 

 

根据需要,我们可以在重载的方法中写入需要的代码,如上面代码中,我只是在OnResultExecuted方法中写入了一些方法,用来记录操作日志。如果用过滤器进行验证的话,可以在OnActionExecuting方法里面进行一些验证。过滤器是在对请求进行处理时对动作逻辑进行扩展的手段,而不需要把这种逻辑包含在动作方法中。

在ASP.NET MVC中还有哪些场合会用到过滤器呢? 

  1. 判断登录与否或用户权限
  2. 决策输出缓存
  3. 防盗链
  4. 防蜘蛛
  5. 本地化与国际化设置 
  6. 实现动态Action

在园子里记录一下,方便以后用到后有个简单的回忆提示。

 

引用:http://www.cnblogs.com/boruipower/archive/2012/11/18/2775924.html

 

 

posted @ 2013-03-11 17:05  Ben—Zhang  阅读(7740)  评论(0编辑  收藏  举报