ibcadmin 发表于 2016-12-21 09:26:56

ASP.NET MVC拦截器讲解

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

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

  以日志为例(记录操作日志):


        public ActionResult Index()
        {
                return View();
        }
  
  
        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 filterIAuthorizationFilter在所有Filter和Action执行之前执行AuthorizeAttribute
Action filterIActionFilter分别在Action执行之前和之后执行。ActionFilterAttribute
Result filterIResultFilter分别在Action Result执行之后和之前ResultFilterAttribute
Exception filterIExceptionFilter只有在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



ibcadmin 发表于 2016-12-21 09:27:33

222

即墨还雀 发表于 2016-12-21 09:29:49

135
页: [1]
查看完整版本: ASP.NET MVC拦截器讲解